在每个名称空间内,您还可以定义Socket可以加入和离开的任意通道,这些通道称为房间。房间还共享与名称空间相同的Socket连接。使用房间时要记住的一件事是它们只能在服务器端连接。
您可以在Socket上调用join方法以将Socket订阅到给定的通道。例如,让我们创建一个名为"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) { //增加 roomno 2 个客户在一个房间里。 if(io.nsps['/'].adapter.rooms["room-"+roomno] && io.nsps['/'].adapter.rooms["room-"+roomno].length > 1) roomno++; socket.join("room-"+roomno); //将此事件发送给房间中的每个人。 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 Learnfk</title> </head> <script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script> <script> var socket=io(); socket.on('connectToRoom',function(data) { document.body.innerHTML=''; document.write(data); }); </script> <body></body> </html>
现在,如果您连接三个客户端,则前两个将获得以下消息:
链接:https://www.learnfk.comhttps://www.learnfk.com/socket.io/socket.io-rooms.html
来源:LearnFk无涯教程网
You are in room no. 1
最后一个客户端将获得以下消息-
You are in room no. 2
要离开房间,您需要像在Socket上调用join函数一样调用Leave函数。
如-要离开房间'room-1',
socket.leave("room-"+roomno);
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕