### 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の意味がわかると、楽しくなってきます。