2017-06-07 17 views
0

websocket(両端のPython API)で複数の大きなPandas Dataframesを含むpickled python辞書を送る必要があります。パフォーマンスを向上させるために、pickledオブジェクトをwebsocketに送る前に圧縮したいと思います。ただし、これを行うとき、受信メッセージは常にNoneです。gevent websocketでバイナリデータを送信する

クライアント:

df = pd.DataFrame({'a':[1,2,3,4]}) 
d = dict(b=df) 
msg = zlib.compress(pickle.dumps(d),5) 
socket.send(msg) 

サーバー:

msg = socket.receive() 
# msg is always None when called with client code above. 
data = pickle.loads(zlib.decompress(msg)) 

がこれを行うには良い方法はありますか? 私はFlask-Socketsフレームワークを通してgevent-websocketを使用しています。

答えて

0

あなたがクライアント(ws4py)にbinary=Trueを設定する必要があり、Pythonの2.7でバイナリデータを送信するには:別の注意点としては

socket.send(msg, Binary=True) 

を、受信側で、あなたは前にバッファにMSGをラップする必要があります。 zlib.decompress()に送信

msg = socket.receive() 
data = pickle.loads(zlib.decompress(buffer(msg))) 
関連する問題