我正在尝试让登录用户加入连接上的某个socket.io房间。 根据我在网上发现的任何例子,我似乎已经从客户端发出一些动作,以便能够加入一些房间。 类似的东西:
socket.on('connect', function() {
socket.emit('join', 'room1');
});
Server.js:
io.sockets.on('connection', function(socket) {
socket.on('join', function(room) {
socket.join(room);
});
});
根据大多数教程,它应该有用。
我的想法是:
socket.on('connect', function() {
socket.join('room1');
});
但它似乎不起作用,因为我从服务器发出的消息不会被客户端捕获。任何想法,我做错了什么?一般来说可能吗?
答案 0 :(得分:14)
这应该是你需要的。随意通过客户端传递您想要的任何房间名称。只有服务器才能处理为房间分配套接字。
服务器:
io.sockets.on('connection', function(socket) {
socket.on('join', function(room) {
socket.join(room);
});
});
客户端:
socket.emit('join', roomNum);
答案 1 :(得分:12)
客户端没有.join()
方法。房间纯粹是服务器端构造,客户端对它们一无所知。
您的第一个代码块是理想的执行方式。您向服务器发送一条设计消息,要求它将套接字加入房间,并在服务器端执行.join()
。
答案 2 :(得分:2)
这很容易实现。您需要做的就是传递服务器理解的查询参数。
以下示例未经过全面测试,但该想法可行。在此示例中,房间名由客户端上的window.location.href
确定。
<强>客户端强>
// Last segment of path is roomName
var roomName = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
var socket = io({
query: {
roomName: roomName,
},
});
服务器强>
var io = require('socket.io')(server);
io.on('connection', function(socket) {
var query = socket.handshake.query;
var roomName = query.roomName;
if(!roomName) {
// Handle this as required
}
socket.join(roomName);
});