2016-03-22 10 views
0

私は、HerokuのNode/SocketIOでリアルタイムマルチプレイヤーゲームを構築しようとしていますが、SocketIO接続データの共有に関して複数のdynosを扱う方法がわかりません。例えばNode.js + Socket.ioを複数のdynosで使用する

  1. Iは、2 Herokuのdynosを有する各実行しているノード+ SocketIO
  2. プレイヤーAがゲームをホストし、ダイノ1が接続
  3. プレーヤーBが同じゲームに参加しようとするハンドルしかし、Herokuルータのために、dyno 2はその接続を処理してしまいます。
  4. アクションはリアルタイムで発生する必要があるため、プレイヤーAがアクションを実行すると、プレーヤーBはそのアクションの結果をすぐに確認する必要があります。

単一のdyno環境では、これは比較的簡単です。プレイヤーAがアクションを実行すると、プレーヤーBに放出されます。複数のダイノーがある場合、これはどのように機能しますか?あなたは(web.1web.2、またはweb.n)に接続しているどのHerokuのダイノ選択することができない(あるいは知っている)ので

答えて

1

は、あなたは多くのdynos渡ってゲーム内の変更を通信するために別の方法を見つける必要があります。

これを行う1つの方法は、分散メッセージングサービスを追加してゲームの変更を通知することです。分散されたパブリック・サブスクリプション・アーキテクチャーを使用すると、プレーヤーAはゲーム内のアクションをdyno 1に送信して、dyno 1をキューに入れます。

Dyno 2は、プレーヤーBがゲームに参加するときにゲームのキューにをサブスクライブするとをサブスクライブします。これで、Dyno 2はゲームからアクションを受け取り、プレーヤーBにソケットを介して送信できます。

このアプローチは、単一の高性能サーバーほど遅くはありませんが、スケーリングと冗長性の利点を得るためには、必要な場合があります。

Herokuでは、この目的のためにを使用することを検討することがあります。これは、Herokuがホストされたバージョンを提供し、低レイテンシのアプリケーションでうまく動作するためです。

関連する問題