skyork
skyork

Reputation: 7401

JSON messages in SockJS-Tornado

In on_message() method of SockJS-Tornado library, I want to send JSON messages to clients: sometimes to specific clients using send() method, and sometimes to a group of clients using broadcast() method.

I wonder whether I need to use something like simplejson to encode string-keyed dictionary object myself before sending the message, i.e.

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

Or the encoding part is already taken care of by SockJS-Tornado? In addition, is it true that message argument in on_message() method is always also a JSON object?

Upvotes: 2

Views: 1990

Answers (1)

Joes
Joes

Reputation: 1818

SockJS is websocket emulation layer. Websockets don't support anything except of text and binary data.

So, while you can send arbitrary python object over the wire (sockjs-tornado will do internal json serialization and does not enforce strings), this is discouraged for compatibility reasons.

Yes, double encoding will happen if json is used as a application protocol. However, if you're going to have broadcast functionality - use optimized broadcast() method, it will do json-encoding only once for all recipients.

There was related discussion in mailing list as well: https://groups.google.com/forum/?fromgroups#!topic/sockjs/vsFvHqppq5g

Upvotes: 2

Related Questions