在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对象吗?
答案 0 :(得分:2)
SockJS是websocket仿真层。除了文本和二进制数据之外,Websockets不支持任何内容。
因此,虽然您可以通过线路发送任意python对象(sockjs-tornado将执行内部json序列化并且不强制执行字符串),但出于兼容性原因,不鼓励这样做。
是的,如果将json用作应用程序协议,则会发生双重编码。但是,如果您要使用广播功能 - 使用优化的broadcast()方法,它将只为所有收件人执行一次json编码。
邮件列表中也有相关讨论:https://groups.google.com/forum/?fromgroups#!topic/sockjs/vsFvHqppq5g