1

私はNODE.JSとsocket.IOを使用して実験的なオンラインポーカーゲームを行っています。ゲームを開始するには、3人のプレイヤーが参加する必要があります。私はsocket.IOを使用して、参加しているプレーヤーからの接続をリッスンします。3人のプレイヤーが来るときはいつでも、彼らは1つのグループを形成します。現在、私はこれを行うためにいくつかの共有変数を使用しています。しかし、同時にたくさんのプレイヤーが入ってくると、同期の問題が発生するのではないかと心配しています。コードスニペットからわかるように、プレーヤー、グループ、groupNumber、comingPlayer、クライアントはすべて、複数の「接続」イベントハンドラー間で共有されます。したがって、1つのイベントハンドラーが実行され、別のイベントハンドラーが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;                                                                       
    }          
}
4

1 に答える 1

0

表示したコードはアトミックであるため(別のイベントハンドラーを実行する前に完全に終了します)、同期の問題は発生しません。ノードでは、ユーザーが作成したすべてのコードが単一のスレッドで実行されることに注意してください。他の誰かが接続しようとしても、あなたがしていることを中断することはありません。

于 2012-10-06T01:46:49.970 に答える