Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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 Socket.io-告诉客户是否创建或加入房间_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript Socket.io-告诉客户是否创建或加入房间

Javascript Socket.io-告诉客户是否创建或加入房间,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我目前使用以下代码允许用户在socket.io中创建/加入特定的文件室: socket.on('create', function (roomId) { ... socket.join(roomId); ... }); 由于join函数用于创建和加入同一个文件室,因此我想告诉客户他是创建文件室的人还是刚刚加入现有文件室的人 我想做的事 我尝试存储Id(以及与问题无关的其他信息),然后检查该Id是否已存在,并根据结果发出不同的消息。比如: // "repo" is

我目前使用以下代码允许用户在socket.io中创建/加入特定的文件室:

socket.on('create', function (roomId) {

    ...

    socket.join(roomId);

    ...

});
由于join函数用于创建和加入同一个文件室,因此我想告诉客户他是创建文件室的人还是刚刚加入现有文件室的人

我想做的事

我尝试存储Id(以及与问题无关的其他信息),然后检查该Id是否已存在,并根据结果发出不同的消息。比如:

// "repo" is a variable declared globally

socket.on('create', function (roomId) {

    ...

    socket.join(roomId);

    if (repo.hasRoom(roomId)) {
        app.io.sockets.in(roomId).emit('someone Joined');
    } else {
        app.io.sockets.in(roomId).emit('someone Created this room');
        repo.saveRoom(roomId);
    }


    ...

});
上面的代码不起作用,因为客户端无法接收发出的消息(我猜是因为在“create”事件中)。明确地说,我可以在服务器上确定是否创建了房间,但客户端不知道


是否有有效的方法通知客户他是否负责创建或只是加入房间?

join
应该接受回调作为第二个参数-您是否可以利用这一点来发挥优势?不过,有一个问题可能会对你想要的行为产生影响。非常有趣。我会试一试,让你知道结果:)至少(即使bug已经存在)我可以在创建房间时进行回调。我只需要以一种即使在bug被修复时也能正常工作的方式编写代码。我不认为在回调中检查房间中的套接字数量是确定房间是否已创建或加入的一种方法,对吗?如果房间中只有一个插座,那么它只是被创建的——比这个还要多,而进行连接的插座已经连接了一个现有的房间。想法?谢谢,使用emit上的回调有效:)我所做的是将“if(repo.hasRoom)”复选框移到回调中,并根据结果发出不同的信号。我从客户端捕获接收到的相关信号。如果你写下解决方案,我可以接受:)不用担心-你找到了解决方案,我只是提供了一个建议。不管怎样,很高兴你能解决你的问题
join
应该接受回调作为第二个参数-也许你能利用它发挥你的优势吗?不过,有一个问题可能会对你想要的行为产生影响。非常有趣。我会试一试,让你知道结果:)至少(即使bug已经存在)我可以在创建房间时进行回调。我只需要以一种即使在bug被修复时也能正常工作的方式编写代码。我不认为在回调中检查房间中的套接字数量是确定房间是否已创建或加入的一种方法,对吗?如果房间中只有一个插座,那么它只是被创建的——比这个还要多,而进行连接的插座已经连接了一个现有的房间。想法?谢谢,使用emit上的回调有效:)我所做的是将“if(repo.hasRoom)”复选框移到回调中,并根据结果发出不同的信号。我从客户端捕获接收到的相关信号。如果你写下解决方案,我可以接受:)不用担心-你找到了解决方案,我只是提供了一个建议。不管怎样,很高兴你能解决你的问题!