gpt4 book ai didi

NODE.JS 访问 socket.IO 事件处理程序中的共享变量

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:32 29 4
gpt4 key购买 nike

我正在使用 NODE.JS 和 socket.IO 做一个实验性在线扑克游戏。游戏需要3名玩家加入才能开始。我使用 socket.IO 来监听加入玩家的连接。每当有3名玩家到来时,他们就会组成一组。目前我使用一些共享变量来做到这一点。但如果有很多玩家同时进入,我担心会导致同步问题。从代码片段中可以看到,玩家、组、groupNumber、comingPlayer、客户端都在多个“连接”事件处理程序之间共享。因此,当执行一个事件处理程序并且 V8 引擎调度另一个事件处理程序时,它可能会破坏这些共享变量的状态。

我使用 Google 进行了一些研究,但没有找到满意的答案。所以我在这里发帖,看看有没有高手可以帮助我。提前致谢!

var clients = {}; // {"player1": 1} {"player2": 1} {"player3": 1}
var groups = {}; // {"1": ["player1", "player2", "player3"]
var groupNumber = 1; // the current group number
var comingPlayers = 0; // a temporary variable for the coming players
var players = []; // a temporary array containing the players which have not formed 1 group

socket.on('connection', function(client) {
sockets[client.id] = client;
players.push(client.id);
clients[client.id] = groupNumber;
comingPlayers++;
if (comingPlayers === 3) { // now there are 3 players which can compose 1 group
groups[groupNumber] = arrayClone(players);
gamePlay(groupNumber);
players = [];
groupNumber++;
comingPlayers = 0;
}
}

最佳答案

您显示的代码是原子的(它将在另一个事件处理程序运行之前完全完成),因此您不应该遇到任何同步问题。请记住,在 Node 中,所有用户编写的代码都在单个线程中运行。如果其他人尝试连接,它不会中断您正在做的事情。

关于NODE.JS 访问 socket.IO 事件处理程序中的共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743875/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com