我可以通过Python中的tornado websocket发送gzip压缩数据吗?

时间:2017-06-20 05:26:00

标签: javascript python websocket tornado

我想将龙卷风服务器的gzip压缩数据发送到javascript客户端。这是我的代码。

buf = StringIO()
gfile = gzip.GzipFile(mode='wb', fileobj=buf)
try:
    gfile.write( "hello world" )
finally:
    gfile.close()

compressed_data = buf.getvalue()    
self.write_message( compressed_data )

服务器端不提供错误。但是chrome会产生错误"无法将文本框架解码为UTF8"。

这里有解决方法吗?

1 个答案:

答案 0 :(得分:2)

使用self.write_message(compressed_data, binary=True)发送二进制消息。您还需要更改应用程序的客户端以对其进行解压缩。

请注意,二进制数据可能难以在javascript中使用,因此您可能希望使用websocket压缩扩展而不是自己压缩数据(这将使Tornado自动压缩数据,并且浏览器将对其进行解压缩)。

要启用此功能,请覆盖WebSocketHandler子类中的get_compression_options()

def get_compression_options(self):
    return {}

空dict使用默认值,或者您可以返回{'compression_level': 9}之类的参数。使用此模式时,您只需照常编写邮件,而不是压缩邮件。