0

Heroku で Node / SocketIO を使用してリアルタイム マルチプレイヤー ゲームを構築しようとしていますが、SocketIO 接続データの共有に関して複数の dyno を処理する方法がわかりません。

例えば:

  1. 2 つの Heroku dyno があり、それぞれが Node + SocketIO を実行しています
  2. プレーヤー A がゲームをホストし、dyno 1 がその接続を処理します
  3. プレーヤー B は同じゲームに参加しようとしますが、Heroku ルーターが原因で、dyno 2 がその接続を処理することになります。
  4. ゲーム内のアクションはリアルタイムで発生する必要があるため、プレーヤー A がアクションを実行すると、プレーヤー B はそのアクションの結果をすぐに確認する必要があります。

単一の dyno 環境では、これは比較的単純です。プレイヤー A がアクションを実行すると、プレイヤー B に送信されます。複数の dyno がある場合、これはどのように機能しますか?

4

1 に答える 1

2

web.1接続している Heroku dyno ( 、web.2、または)を選択 (または知ること) できないためweb.n、多くの dyno 間でゲームの変更を伝える別の方法を見つける必要があります。

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

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

このアプローチは、単一の高性能サーバーほどレイテンシーが低くなるわけではありませんが、スケーリングと冗長性の利点を得るには、同様のものが必要になる場合があります。

Heroku では、ホストされたバージョンが提供され、低レイテンシのアプリケーションで適切に機能するため、この目的でRedisを使用することを検討できます。

于 2016-03-22T02:48:44.560 に答える