Socket.IO - 房间
Socket.IO 房间是一个在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);