- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,多人可以通过输入在托管游戏的手机上生成的代码来加入游戏。我想使用此代码作为套接字 io 房间的名称,以便不同组的玩家之间可以进行多个游戏。
这是我的服务器代码:
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(3000);
io.on('connection', function (socket) {
//passing in the game_code from client side and using it as the room name
socket.on('names', function (game_code) {
socket.join(game_code);
io.to(game_code).emit('names')
});
socket.on('round_start', function (game_code) {
io.to(game_code).emit('round_start')
});
socket.on('game_start', function (game_code) {
io.to(game_code).emit('game_start')
});
socket.on('end_round', function (game_code) {
io.to(game_code).emit('end_round')
});
socket.on('next_round', function (game_code) {
io.to(game_code).emit('next_round')
});
socket.on('end_game', function (game_code) {
io.to(game_code).emit('end_game')
});
});
“名字”插槽用于玩家在游戏开始前输入名字,其余部分用于过渡到下一个屏幕;一部电话(通常是主机)按下一个按钮,使所有电话转到下一个屏幕。 “names”套接字工作正常,“round_start”套接字也正常工作,这是第一个屏幕转换。此后的下一个屏幕转换不起作用。
如果我不使用房间,所有屏幕转换都会起作用,所以我很确定我的 react native 代码不是这里的问题。我上面显示的服务器代码肯定有问题。
最佳答案
由于您没有提供完整的源代码,我只能假设可能出了什么问题。
首先,由于您使用了io.to(game_code).emit('names')
,我假设您希望将“names”事件发送给房间中的所有客户端game_code
,包括发送者。
(旁注:如果您希望将此事件发送给房间中除发送者之外的所有用户,您应该使用 socket.to(game_code).emit('names')
。请参阅https://socket.io/docs/emit-cheatsheet/)
但是,由于 .join
方法是异步的,因此在客户端加入房间之前,可能会触发“names”事件。因此,发送者永远不会收到自己触发的“names”事件,只会收到其他客户端触发的“names”事件。
为了确保在客户端加入房间后触发“names”事件,您可以使用 .join
方法的回调:socket.join(room, callback)
.
io.on('connection', function (socket) {
//passing in the game_code from client side and using it as the room name
socket.on('names', function (game_code) {
socket.join(game_code, (game_code) => io.to(game_code).emit('names'););
});
//rest of your code
});
如果您不熟悉 =>
箭头函数,(game_code) => io.to(game_code).emit('names')
很短对于
function (game_code){
return io.to(game_code).emit('names');
}
(别介意 return 关键字,它只是箭头函数的一部分)
关于javascript - 套接字 IO 室 : Trying to use rooms in a game app (react-native) so multiple groups of people can play the game independently of each other,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876538/
我是一名优秀的程序员,十分优秀!