【发布时间】:2012-07-05 04:01:56
【问题描述】:
我使用node.js进行游戏配对(例如,多个客户端连接服务器。如果有多个玩家,则它们相互连接;否则将被踢30秒)。
目前,我正在使用套接字进行连接(这可以检测到意外丢失的连接)。但我想不出一种优雅的配对方式:
var net = require('net');
var _clients = new Array();
net.createServer(function(_socket) {
_socket.on('data', function(_data) {
//Parse client data
_clients.push(_socket);
setTimeout(function(){
_socket.write('kicked\n');
},30*1000);
_socket.on('close', function(data) {
//Delete _socket from _clients
}
}).listen(6969, '127.0.0.1');
setInterval(function(){
var pair = new Array();
while(_clients.length>2)
{
var _s1 = _clients.pop(), _s2 = _clients.pop();
// Pair _s1 & _s2
}
},2*1000);
当前的代码可以工作,但设计得非常糟糕:(
(1)使用SetInterval,而不是异步调用。 (2)维护像_clients这样的数组很不方便,因为我必须处理“踢”/丢失连接/对或其他情况。
PS。目前我正在按时间顺序配对客户端,但可能需要随机配对或其他条件以避免在线玩家不多时总是配对相同的人。
【问题讨论】: