在连接时连接套接字房间

Joining socket io room on connect

本文关键字:连接 房间 套接字      更新时间:2023-09-26

我正在尝试使登录用户加入某个套接字。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');
});

但是它似乎不起作用,因为我从服务器发出的任何msg都不会被客户端捕获。知道我哪里做错了吗?这在一般情况下可能吗?

这应该是您需要的。请随意通过客户输入您想要的任何房间名称。只有服务器可以处理为房间分配套接字。

服务器:

io.sockets.on('connection', function(socket) {
        socket.on('join', function(room) {
        socket.join(room);
    });
});
客户:

socket.emit('join', roomNum);

客户端没有.join()方法。房间纯粹是一个服务器端构造,客户端对它们一无所知。

你的第一个代码块就是你想要做的事情。您向服务器发送您设计的消息,要求它将套接字连接到一个房间,并且在服务器端执行.join()

这很容易实现。您所需要做的就是传递一个服务器能够理解的查询参数。

下面的例子没有经过完全的测试,但是这个想法是可行的。在本例中,roomname由客户端上的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);
});