質問: 現在、Ruby on Rails + socket.io を利用して、 特定のチャットルームに参加しているユーザーに対してメッセージを送信し、 ルームの参加者がリアルタイムにメッセージを受信できる機能を開発しています。 以下のコードのように socket.io の Room という機能で特定のルームに送信しようと考えています。 **サーバー側(server.js)** ``` io.sockets.on('connection', function(socket) { socket.join('some room'); socket.on('sendMessage', function(message) { socket.to('some room').json.emit('receiveMessage', message); }); socket.on('disconnect', function () { console.log('user disconnected'); }); }); ``` サーバーは Rails とは別で Node で動作しています。 **クライアント側(chat.js)** ``` componentDidMount() { // メッセージの受信 socket.on('receiveMessage', (message) => { this.receiveMessage(message); }); } sendMessage(content) { // メッセージの送信 $.ajax({ url: '/rooms/x/message', type: 'POST', data: { message: { content } }, dataType: 'json', }).done((data, status, xhr) => { this.setState({ messages: this.state.messages.concat(data.message) }); socket.emit('sendMessage', data.message); }).fail((xhr, status, error) => { console.log('failed to send a message.\'); }); } ``` クライアント側では Ajax でメッセージを送信しています。 知りたいこと ------ 今回はルーム名(some room)に何を利用するのが、適しているかを教えていただきたいです。 一般ユーザーに公開するWebアプリケーションなので、できるだけセキュアにしたいと考えています。 ひとつ思い付いた手法としては、ルームの作成時に Rails サーバーで ユニークなトークンを作成保存し、それを server.js で読み込みルーム名に設定する方法です。 JavaScript(Node) と Rails との連携が難しそうですが、可能だと思います。 このほかにもっと簡単な手法や、提案した手法の問題点などがありましたら、 教えていただけると幸いです。よろしくお願いいたします。
回答: 衝突しなければ、そこまで気にすることはないでしょう。 というのも、Socket.ioのクライアントは**サーバとしか通信できない**ので、自分の接続からルーム名を知ることもできなければ、ルーム名がわかったところで特定のルーム宛に通信することもできないからです。