2017-06-07 4 views
0

Ich muss ein eingelegtes Python-Wörterbuch mit mehreren großen Pandas-Datenrahmen über einen Websocket senden (Python-API an beiden Enden). Um die Leistung zu verbessern, möchte ich das gebeizte Objekt komprimieren, bevor es über den Websocket gesendet wird. Wenn Sie dies tun, ist die empfangene Nachricht jedoch immer "Keine".Senden von Binärdaten über gevent websocket

Auftraggeber:

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

Server:

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

Gibt es einen besseren Weg, dies zu tun? Ich verwende gevent-websocket durch das Flask-Sockets Framework.

Antwort

0

Um Sie Binärdaten in Python 2.7, senden binary=True im Client (ws4py) einstellen:

socket.send(msg, Binary=True) 

Als weiteren Notiz, auf der Empfangsseite, müssen Sie die msg in einem Puffer wickeln, bevor Senden an zlib.decompress()

msg = socket.receive() 
data = pickle.loads(zlib.decompress(buffer(msg))) 
Verwandte Themen