2016-09-01 7 views
0

私はsocket.ioライブラリに基づいて私のマルチプレイヤーゲームを持っています。私はnode.jsにマルチスレッドを扱うためのクラスタモジュールがあることを学びました。 私のゲームの世界は複数のゾーンで構成されており、それぞれのゾーンを独自の処理で処理する必要があります。特定のワーカーにユーザーのソケットを渡す方法が必要なので、ユーザーはゾーン間を移動できます。 node.jsドキュメントでは、クラスタモジュールがすべての接続に対してワーカーを選ぶためにラウンドロビン方式を使用していることを確認しました。多分、接続を操作するための回避策がありますか?Node.jsクラスタは特定のワーカーに接続を渡します

+0

あなたは創造的になり、プロセスを開始し、0mqのような何らかのキューを介してそれらと通信することができます。それはあなたが答えとして探しているものではないが、それは秋に戻る可能性があります – akaphenom

+0

こんにちは@akaphenom、あなたの答えをありがとう。私は前にzmqについて聞いたことがありません。多分、zmqとnode.jsを使って同様の状況に対処する方法についてのリンクがありますか? – Gugis

+0

あなたは 'nginx'や' HAProxy'のようなウェブサーバを使うだけでこれを解決できると思います。 'Docker'を使用して各サーバで同じアプリケーションの複数のインスタンスを起動し、' nginx'または 'HAProxy'を使ってロードバランスをとることができます。 –

答えて

1

クラスタリングがあなたにとって最適なソリューションであるとは必ずしも言えません。クラスタリングの主な利点は、異なるプロセス間で着信接続の自動バランシングが行われることです。ただし、その機能を使用する必要はありません。特定のゾーンを処理しているプロセスに各接続を手動で割り当てる必要があります。

このように、必要なプロセスの数を開始し、そのゾーンに固有の各ポートを割り当ててから、クライアントがAjaxリクエストをマスターに送信してどのポート彼らは彼らのゾーンのためのsocket.io接続を行う必要があります。クライアントはそのajaxレスポンスを取得してから、そのゾーンの適切なサーバーに直接接続します。すべてのsocket.ioサーバーは、目的のマスターページのドメイン/ポートからのクロスオリジン要求を許可する必要があります。

ゾーンのサーバーへの接続は、上記のようにポート経由で行うことも、zone1.mygameserver.comなどの別のホスト名で行うこともできます。そして、nginxのようなものを使用して、ボックス。

+0

したがって、ユーザーがあるゾーンを終了し、別のクライアントを入力して現在のゾーンサーバーから切断して新しいゾーンに接続する必要がある場合は、しかし、ゾーン間の遷移が画面などをロードせずに知覚できなければならない場合はどうすればよいでしょうか? – Gugis

+0

@Gugis - あなたはsocket.io接続について話しています。 1つのsocket.io接続を閉じて別のsocket.ioを開くことは、ユーザの画面や現在のページなどに何の影響も与えません。ユーザには完全に見えません。 – jfriend00

+0

どうすれば安全にセッションを転送できますか? – Gugis

関連する問題