socket.ioでサーバからクライアントへバイナリデータを送る際の送信元

前提

  • socket.io 1.3.5

socket.ioのroomにはsocket.io自体にクライアントがどのroomに対してメッセージを送ったか判別する手段がない。つまり、1ユーザが同時に複数のroomに所属する場合、どのroomにメッセージを送るかは送信メッセージ上で組み込む必要がある。JavaScriptで解析が面倒なバイナリデータを転送する場合はroom機能を使わないか、バイナリをbase64エンコードなどする必要がありそう(JSONにバイナリデータを格納した場合、バイナリセーフである確証が得られなかったため)。

もう一つ、namespaceという機能があり、この場合、どのnamespace宛にデータを送信したかsocket.ioで判定可能になる。ただし、namespaceから特定クライアントだけを切断したり、namespace自体を解散する公式なAPIが今のところ無いようだ。(roomは切断APIがあり、すべてのクライアントが切断した場合roomが解散される) 試した挙句、機能自体はnamespaceで作り、切断の機構を自作するしかなさそう。

参考

stackoverflow.com

stackoverflow.com