node.jsを使用して独自のマルチプレイヤー ゲーム サーバーを構築し、コードをHerokuにデプロイしたいと考えています。私の質問は、私が説明することがそのように可能かどうかです:)
Androidゲームのプレイヤーが非常に高速な (必ずしもリアルタイムではない) ゲーム サーバーに接続できるようにしたいと考えています。ゲーム サーバーはそれらをルーム (チャネル) にグループ化できる必要があり、それらがルームにある場合は、公開およびサブスクライブできる必要があります。ということは、node.jsサーバー経由でプレイヤー同士でゲーム情報を交換してもらいたいということです。
サーバーでは、wsを含むnode.jsを使用して、WebSocketサーバーが次のようなクライアント イベントをリッスンします。
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 8080 });
var clientList = {};
wss.on('connection', function(ws) {
ws['AUTH'] = getGUID();
clientList[ws['AUTH']] = ws; // ws['AUTH'] has joined the server
ws.on('message', function(message) {
for (var clientID in clientList) {
clientList[clientID].send(message);
}
});
ws.on('close', function() {
delete clientList[ws['AUTH']]; // ws['AUTH'] has left the server
}
ws.send('something');
});
function getGUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
クライアント側では、このゲーム サーバーとの通信に autobahn.ws (どの部分? WAMP? PubSub または RPC?) を使用したいと考えています。
これが機能する場合、Pusher や PubNub などのサービスの非常に基本的なバージョンを数行で作成できますよね? チャネル、認証などを追加する必要があります。
上記のコードでこれが可能である場合、Heroku でも動作しますか?
- 複数の dynoを持つことはどうですか? それらは共通のメモリ (
clientList
) を共有していますか、それともそれらの間で同期する必要がありますか? どのように?クラスター APIを使用していますか? - 1 つの dyno で動作すると予想されるクライアントの数はおおまかに何ですか? dyno ごとに 100 人の同時ユーザーは期待しすぎですか?