Socket.IO - 房间
在每个命名空间中,您还可以定义套接字可以加入和离开的任意通道。这些通道称为房间。房间用于进一步分离关注点。房间也像命名空间一样共享相同的套接字连接。使用房间时要记住的一件事是它们只能在服务器端加入。
加入房间
您可以调用套接字上的join方法来将套接字订阅给定的频道/房间。例如,让我们创建名为“room-<room-number>”的房间并加入一些客户端。一旦这个房间已满,就创建另一个房间并在那里加入客户。
注意- 我们目前正在默认名称空间(即“/”)上执行此操作。您还可以以相同的方式在自定义命名空间中实现此功能。
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('index.html');
});
var roomno = 1;
io.on('connection', function(socket){
socket.join("room-"+roomno);
//Send this event to everyone in the room.
io.sockets.in("room-"+roomno).emit('connectToRoom', "You are in room no. "+roomno);
})
http.listen(3000, function(){
console.log('listening on localhost:3000');
});
只需在客户端处理此connectToRoom事件即可。
<!DOCTYPE html>
<html>
<head><title>Hello world</title></head>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('connectToRoom',function(data){
document.body.innerHTML = '';
document.write(data);
});
</script>
<body></body>
</html>
现在,如果您连接三个客户端,前两个客户端将收到以下消息 -
You are in room no. 1
离开房间
要离开房间,您需要调用 left 函数,就像在套接字上调用 join 函数一样。
例如 - 要离开房间 ' room-1 ',
socket.leave("room-"+roomno);