ゲームのペアリングに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。現在、私はクライアントを時系列でペアリングしていますが、オンライン プレイヤーがそれほど多くないときに常に同じ人をペアリングすることを避けるために、ランダム ペアまたはその他の条件が必要になる可能性があります。