Javascript Socket IO Rooms:尝试在游戏应用程序中使用Rooms(react native),以便多组人可以独立地玩游戏

Javascript Socket IO Rooms:尝试在游戏应用程序中使用Rooms(react native),以便多组人可以独立地玩游戏,javascript,react-native,socket.io,Javascript,React Native,Socket.io,我有一个应用程序,多人通过输入游戏主机手机上生成的代码加入游戏。我想用这个代码作为socket io房间的名称,这样不同玩家组之间就可以进行多个游戏 这是我的服务器代码: var express=require('express'); var-app=express(); var server=require('http')。服务器(应用程序); var io=require('socket.io')(服务器); 听(3000); io.on('连接',函数(套接字){ //从客户端传入gam

我有一个应用程序,多人通过输入游戏主机手机上生成的代码加入游戏。我想用这个代码作为socket io房间的名称,这样不同玩家组之间就可以进行多个游戏

这是我的服务器代码:

var express=require('express');
var-app=express();
var server=require('http')。服务器(应用程序);
var io=require('socket.io')(服务器);
听(3000);
io.on('连接',函数(套接字){
//从客户端传入game_代码并将其用作房间名称
socket.on('names',函数(游戏代码){
socket.join(游戏代码);
io.to(游戏代码).emit('名称')
});
socket.on('round_start',函数(游戏代码){
io.to(游戏代码).emit('round\u start')
});
socket.on('game_start',函数(game_代码){
io.to(游戏代码).emit('游戏开始')
});
socket.on('end\u round',函数(游戏代码){
io.to(游戏代码).emit('end\u round')
});
socket.on('next_round',函数(游戏代码){
io.to(游戏代码).emit('下一轮')
});
socket.on('end_game',函数(game_代码){
io.to(游戏代码).emit('游戏结束')
});

});由于您没有提供完整的源代码,我只能假设可能出现了什么问题

首先,由于您使用了
io.to(game\u code).emit('names')
,我假定,您希望将'names'事件发送到房间
game\u code
中的所有客户端,包括发送方

(旁注:如果希望将此事件发送给会议室中的所有用户(发件人除外),则应使用
socket.to(game_code).emit('names')
。请参阅)

但是,由于
.join
方法是异步的,因此在客户端加入会议室之前,“names”事件可能会被触发。因此,发送方从不接收自己触发的“names”事件,只接收其他客户端触发的“names”事件

为了确保在客户端加入文件室后触发“names”事件,您可以对
.join
方法使用回调:
socket.join(文件室,回调)

如果您不熟悉箭头函数,
(游戏代码)=>io.to(游戏代码).emit('names')

function (game_code){
  return io.to(game_code).emit('names');
}
(不管return关键字是什么,它只是arrow函数的一部分)

function (game_code){
  return io.to(game_code).emit('names');
}