SockJS-Tornado中的JSON消息

时间:2012-09-14 01:39:07

标签: websocket tornado sockjs

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

我想知道在发送消息之前我是否需要使用类似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对象吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

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