1
我正在做一個使用NODE.JS和socket.IO的實驗性在線撲克遊戲。該遊戲需要3名玩家加入才能開始。我使用socket.IO來收聽加入玩家的連接。每當有三名球員進入時,他們將組成一個組。目前我使用一些共享變量來做到這一點。但是如果有很多玩家同時進來,我擔心它會引起同步問題。從代碼片段中可以看到,玩家,組,groupNumber,comingPlayer,客戶端都是在多個「連接」事件處理程序之間共享的。所以,當一個事件處理程序被執行並且另一個事件處理程序被V8引擎調度時,它可能會破壞這些共享變量的狀態。NODE.JS訪問socket.IO事件處理程序中的共享變量
我已經使用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適合任何生產環境的性能?這意味着不需要人工干預,所有的HTTP連接都將被逐個處理。我知道IO部分將由操作系統異步處理,但我不知道正常計算花費多少時間。 – EricCui
如果對運行時間有疑問,請對其進行分析,不要猜測。 – ebohlman