2

SockJS on_message()-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エミュレーションレイヤーです。Websocketは、テキストとバイナリデータ以外は何もサポートしていません。

したがって、任意のpythonオブジェクトをネットワーク経由で送信できますが(sockjs-tornadoは内部jsonシリアル化を行い、文字列を強制しません)、互換性の理由からこれはお勧めしません。

はい、jsonをアプリケーションプロトコルとして使用すると、ダブルエンコーディングが発生します。ただし、ブロードキャスト機能を使用する場合は、最適化されたbroadcast()メソッドを使用すると、すべての受信者に対して1回だけjsonエンコードが実行されます。

メーリングリストにも関連する議論がありました:https ://groups.google.com/forum/?fromgroups#!topic / sockjs / vsFvHqppq5g

于 2012-09-14T18:28:30.010 に答える