1

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 でも動作しますか?

  1. 複数の dynoを持つことはどうですか? それらは共通のメモリ ( clientList) を共有していますか、それともそれらの間で同期する必要がありますか? どのように?クラスター APIを使用していますか?
  2. 1 つの dyno で動作すると予想されるクライアントの数はおおまかに何ですか? dyno ごとに 100 人の同時ユーザーは期待しすぎですか?
4

1 に答える 1