### html
– roomの値とmsgをjsonでemitする
<form id="myForm"> <select id="rooms"> <option value="room-1">Room 1</option> <option value="room-2">Room 2</option> </select> <input type="text" id="msg"> <input type="submit" value="send"> </form> <ul id="logs"> </ul> <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script> <script src="/socket.io/socket.io.js/"></script> <script> $(function(){ var socket = io.connect(); // emit: イベント発信 (ブラウザ側) // on: イベント待ち受け (サーバ側) $('#myForm').submit(function(e){ // preventDefaultでsubmit後に遷移しないようにする e.preventDefault(); socket.json.emit('emit_from_client', { room: $('#rooms').val(), msg: $('#msg').val(), }); $('#msg').val('').focus(); }); socket.on('emit_from_server', function(data){ $('#logs').append($('<li>').text(data)); }); }); </script>
### app.js
joinしたルームに対してsocket.broadcastする
io.sockets.on('connection', function(socket){ socket.on('emit_from_client', function(data){ // ルームの情報を割り当て socket.join(data.room); socket.emit('emit_from_server', 'you are in ' + data.room); // 対象ルームに対してのみbroadcast socket.broadcast.to(data.room).emit('emit_from_server', data.msg); }); });
on, emit, join, broadcastの意味がわかると、楽しくなってきます。