0

最新の Juggernaut gem についてです (https://github.com/maccman/juggernaut)

アーキテクチャについて考えているのは、たとえば「ドット ゲーム」です。このメタゲームは非常に単純です。ログインしている各ユーザー (ジャガーノートに関しては、チャネルにサブスクライブしています) は、JS キャンバス上のランダムな色のドットです。ユーザーは自分のドットを任意の方向に移動できます。それでおしまい。

Juggernaut は、接続されているクライアントのすべてのデータを転送およびプッシュする必要があります。

現在、私はアーキテクチャを次のように想像しています。

1) クライアントはドットの座標とプレイヤーの ID ([1, [10,299]]) を ajax として Rails などにプッシュします。

2) Rails はこのデータを Juggernaut にプッシュします

3) Juggernaut は、このチャネルをリッスンするすべてのクライアントに座標をプッシュします。

Juggernaut.publish("coordinates_channel", [1, [10,299]])

問題:

1) js キャンバス上の「ドット」オブジェクトをピクセル単位で移動する必要がある場合、送信する AJAX 要求が多すぎます。たとえば、ドットが毎秒 20 ピクセル移動する場合、毎秒 20 のリクエストを送信する必要があります。受け入れられない。

2) Juggernaut.publish を非同期ループ (たとえば EventMachine を使用) にラップする必要がありますか? なぜなら、1000 のクライアント (1000 のドット、および更新された座標を持つデータの絶え間ない流れ) を想像してみてください...

それとも、Juggernaut gem を使用して間違ったクライアントサーバーを取得するのでしょうか? この実装についてどう思いますか?

ありがとうございました。

4

1 に答える 1

3

WebSockets/ロング ポーリング/その他のコメット テクニックはレイテンシが低く、ゲームが遅くなります。Websocket を介したリアルタイム ゲームの実装を見たことがありますが、遅延が発生したり、低レイテンシを考慮してプレイヤーの動きを非常に遅くするなど、ゲームの仕組みが特定されたりしています。従来の AJAX はまったく問題外です。

ラグを改善するためのリソースは次のとおりです
Valve Source Multiplayer Networking
Unreal Source Multiplayer Networking

于 2012-01-14T13:28:33.770 に答える