Javascript Socket io多人游戏基础设施

Javascript Socket io多人游戏基础设施,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我正在尝试用socket.io做一个多人游戏应用程序。当播放器连接时,我希望首先发送一条“登录”消息。我初始化player变量以供进一步使用。 其他消息稍后使用player变量 如何确保客户端在发出其他请求之前发送了“登录”消息。 我可以在需要player的每个请求上检查player是否为null,但这看起来很难看。您可以从登录侦听器中安装其他侦听器: var connectionHandler = function(socket) { var player = null; socket.on

我正在尝试用socket.io做一个多人游戏应用程序。当播放器连接时,我希望首先发送一条“登录”消息。我初始化player变量以供进一步使用。 其他消息稍后使用player变量

如何确保客户端在发出其他请求之前发送了“登录”消息。
我可以在需要player的每个请求上检查player是否为null,但这看起来很难看。

您可以从
登录
侦听器中安装其他侦听器:

var connectionHandler = function(socket) {
var player = null;

socket.on('login', function(data) {
    player = {
        data: okeyServer.playerJoin(data),
        socket: socket
             };
    socket.emit('welcome');
});

socket.on('info server', function(data) {
    var info = okeyServer.Info();
    socket.emit('info server', info);
});

socket.on('join game', function (data) {
    var gameid = data.gameid;
    var side = data.side;
    okeyServer.playerJoinGame(player, gameid, side);
});

socket.on('disconnect', function () {
    okeyServer.playerLeave(player);
    io.sockets.emit('player leave', player);
});
}
这假设在连接的生命周期内,客户端只发出一次
登录
消息。如果不是这样,你需要做一些改变

var connectionHandler = function(socket) {
  var player = null;

  socket.on('login', function(data) {
    // If we already have a player, just return a `welcome` message.
    if (player !== null) {
      return socket.emit('welcome');
    }

    // Store player.
    player = {
      data: okeyServer.playerJoin(data),
      socket: socket
    };

    // Emit welcome message.
    socket.emit('welcome');

    // Set up the rest of the listeners.
    socket.on('info server', function(data) {
      var info = okeyServer.Info();
      socket.emit('info server', info);
    });

    socket.on('join game', function (data) {
      var gameid = data.gameid;
      var side = data.side;
      okeyServer.playerJoinGame(player, gameid, side);
    });

    socket.on('disconnect', function () {
      okeyServer.playerLeave(player);
      io.sockets.emit('player leave', player);
    });
  });
};