[英]Why does socket.on() gets called multiple times
我正在用socket.io做一个小游戏。
服务器端代码(app.js)正在Node上运行...
客户端代码在game.js中
在app.js里面,我有这个
app.get("/playgame", (req, res) => {
res.sendFile(__dirname + "/public/game.html");
});
游戏设置:默认情况下,Player-1将成为挑战者。 Player-2接受挑战。
io.on('connection', (socket) => {
socket.on('createChallenge', function(data) {
let obj = {
id: getroomID(),
players: [{ sock: socket.id, name: data.player1.toLowerCase() }]
};
if (io.sockets.mygameChallenges) {
io.sockets.mygameChallenges.push(obj);
} else {
let rooms = [];
rooms.push(obj);
io.sockets.mygameChallenges= rooms;
}
socket.emit("chalengecreated", { player: data.player1, id: obj.id });
});
一切正常,直到这里..
在输入错误的游戏ID时,我正面临着这个问题
1)Player-2收到输入错误ID的警告信息(这很完美)
2)如果P-2再次输入错误的游戏ID,则此时会收到两条警报消息。
3)如果第三次输入错误的游戏ID,则获得3条警报消息...
这是一段被多次调用的代码
Game.js:
socket.on('errorID', function(data) {
// this gets called multiple times. Not sure why
if (data.error) {
console.log(data.rooms);
alert(data.error);
} else {
alert(data);
}
});
App.js:
if (!matched) {
console.log('ID not found'); // This gets called only once as expected.
socket.emit('errorID', { error: "ID not found", rooms: io.sockets.mygameChallenges});
}
我找到了原因。
socket.on()eventhandle每次播放器输入错误的ID并单击按钮时都会进行设置。
解决方案:我使用了一个布尔值,以便当玩家第一次输入错误的ID时,会设置on()事件。 从第二次起,on()将不会被设置,因为布尔值现在为false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.