背景
Python と C++ のプロセス間で numpy データや画像などそこそこ大きめのデータを扱いたい...
ローカルネットワーク越しで別 PC に処理させたいとか.
websocket(バイナリデータ扱える) を使ってみます.
C++ client, server
server も client も, 組み込みやすい civetweb が楽そうです!
websocket 有効にするには, USE_WEBSOCKET
を define する必要があります.
また, デフォルトでは SSL 有効(SSL ライブラリとのリンクが必要)なので, ローカル PC やローカルネットワークでの利用で wss
不要であれば NO_SSL
も define しましょう.
Python 側
client は websocket-client
がよいでしょうか. websocket
モジュールとは異なりますので注意です!
websocketとwebsocket_clientの競合でうまくimportできないのを解決する
https://qiita.com/ikentoh/items/34b980da07bfc8abfd81
server なら websocket-server
かしら.
Note
CivetWebSocketHandler では, close の要求があると, handleClose
が呼ばれるまえに handleData
の bits に OPCODE_CONNECTION_CLOSE
が立って 2 bytes のデータが来るようです.
virtual bool handleData(CivetServer *server,
struct mg_connection *conn,
int bits,
char *data,
size_t data_len) {
if (bits & MG_WEBSOCKET_OPCODE_CONNECTION_CLOSE) {
printf("WS close\n");
return 0;
}
...
と判定するとよいでしょうか.