2

on_message()SockJS-Tornado 库的方法中,我想向客户端发送 JSON 消息:有时使用方法发送给特定客户端send(),有时使用方法发送给一组客户端broadcast()

我想知道simplejson在发送消息之前是否需要自己使用类似对字符串键控字典对象进行编码的东西,即

on_message(self, message):
    ...
    data = {'type': 1, 'body': 'blah'}
    msg = json.dump(data)
    # self.send(msg) or self.broadcast(conns, msg)

还是 SockJS-Tornado 已经处理了编码部分?另外,方法中的message参数on_message()是否也总是一个 JSON 对象?

4

1 回答 1

2

SockJS 是 websocket 仿真层。Websockets 不支持除文本和二进制数据之外的任何内容。

因此,虽然您可以通过网络发送任意 python 对象(sockjs-tornado 将执行内部 json 序列化并且不强制执行字符串),但出于兼容性原因不鼓励这样做。

是的,如果使用 json 作为应用程序协议,就会发生双重编码。但是,如果您要使用广播功能 - 使用优化的 broadcast() 方法,它只会对所有接收者执行一次 json 编码。

邮件列表中也有相关讨论:https ://groups.google.com/forum/?fromgroups#!topic/sockjs/vsFvHqppq5g

于 2012-09-14T18:28:30.010 回答