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

问题描述:

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

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

}); 

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

首先,我怎么确保有 只有2个可以访问该游戏的 实例球员呢?

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

var instances = []; 

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

是否有可能让他们重新 如果他们失去了联系?

如果您在初次连接时向每个玩家发送一个UUID,您可以让他们在重新连接时使用它进行身份验证。

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

client.send({gameState:gameState()}); instances[ 'game1' ].player1.send(data);

我做这一切与插座:

如果你已经保存在客户端为对象的

我会处理与网络套接字的所有动态交互。

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

我不会通过网络套接字发送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 
};