Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在连接上连接插座io室_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 在连接上连接插座io室

Javascript 在连接上连接插座io室,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在尝试让登录用户加入connect上的某个socket.io文件室。 根据我在网上找到的任何例子,我似乎已经从客户端发出了一些动作,以便能够加入一些房间。 比如: socket.on('connect', function() { socket.emit('join', 'room1'); }); Server.js: io.sockets.on('connection', function(socket) { socket.on('join', function(room)

我正在尝试让登录用户加入connect上的某个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');
});
但它似乎不起作用,因为我从服务器发出的任何消息都不会被客户端捕获。你知道我做错了什么吗?通常可能吗?

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


您的第一块代码是理想的做事方式。您向服务器发送一条您设计的消息,要求它将套接字连接到房间,然后在服务器端执行
.join()

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

服务器:

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

socket.emit('join', roomNum);

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

下面的例子没有经过充分的测试,但是这个想法是可行的。在本例中,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);
});

检查您在服务器端而不是客户端加入这是一个很好的答案,因为有人可以伪造推荐人标题,伪造窗口href更难,而且您不必像其他答案一样提交额外的emit(),这会带来丢失的风险。这是上面的文件