节点JS Express JS客户端/服务器游戏

我在Node.js和Express js上写了一个双人牌游戏(简单来说就是常规扑克)。 有一些事情我遇到了麻烦。 首先,我如何确保只有两名玩家可以访问游戏实例,并且如果他们失去连接,是否可以让他们重新连接? 其次,如何将消息从服​​务器发送到客户端? 我可以在“socket.on”侦听器调用中发送它,但在程序的正常范围内,我无法使其工作。

var socket = io.listen(app); socket.on('connection', function(client){ player++; if(player <= 2) { var messageout = "player " + player + " connected"; client.broadcast(messageout); client.on('message', function(data){console.log(data); }) client.on('disconnect', function(){console.log('disconnected');}) } else { socket.end; } }); 

我在概念上遇到了什么问题以及如何解决这个问题。 例如,我用套接字来做这件事吗? 或者我每回合都会返回一个包含游戏更新状态(卡片,投注等)的网页?

首先,我如何确保只有两名玩家可以访问游戏实例?

创build一个实例对象的数组。
当一个新玩家join时,创build一个新的实例并将其设置为player1,或者将其作为玩家二添加到现有的实例。

 var instances = []; function Instance () { return { name = 'game' + instances.length + 1, gameVariables = defaults, player1 = null, player2 = null, player1UUID = UUID(), player2UUID = UUID() } } 

如果失去连接,是否可以重新连接?

如果您在初次连接时向每个播放器发送一个UUID,则可以让它们在重新连接时使用它进行身份validation。

如何从服务器向客户端发送消息?

client.send({gameState:gameState()});

如果你已经将客户端保存到一个对象中: instances[ 'game1' ].player1.send( data );

我用sockets做这一切吗?

我会处理与networking套接字的所有dynamic交互。

我是否每次都返回一个包含游戏更新状态(卡片,投注等)的网页?

我不会通过networking套接字发送HTML。 而是发送json并使用客户端模板来呈现它。

now试试。

 // server var nowjs = require("now") var everyone = nowjs.initialize(app); everyone.connected(function() { if (users.length < 2) { users.push(this); } }); everyone.now.sendMessage = function(message, cb) { gameLogic(message); users.forEach(function(user) { user.update(gameLogic.getState()); }); }; //client $("#action").click(function() { now.sendMessage($(this).data("action")); }); now.update = function(data) { // update UI };