【问题标题】:Sending binary data over gevent websocket通过 gevent websocket 发送二进制数据
【发布时间】:2017-06-07 18:44:55
【问题描述】:

我需要通过 websocket(两端的 Python API)发送一个包含多个大型 Pandas 数据帧的腌制 python 字典。为了提高性能,我想在通过 websocket 发送之前压缩腌制对象。但是,执行此操作时,收到的消息始终为 None。

客户:

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。

【问题讨论】:

    标签: python sockets websocket compression


    【解决方案1】:

    要在 Python 2.7 中发送二进制数据,必须在客户端(ws4py)中设置binary=True

    socket.send(msg, Binary=True)
    

    另外注意,在接收端,您需要在发送到 zlib.decompress() 之前将 msg 包装在缓冲区中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-09
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2012-03-21
      • 2011-10-14
      相关资源
      最近更新 更多