【问题标题】:Socket io multiplayer game infrastructureSocket io多人游戏基础设施
【发布时间】:2013-11-27 18:32:20
【问题描述】:
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);
});
}

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

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

【问题讨论】:

    标签: javascript node.js express socket.io


    【解决方案1】:

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

    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);
        });
      });
    };
    

    这假定login 消息在连接的生命周期内仅由客户端发出一次。如果不是这种情况,您需要进行一些更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2022-11-17
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多