帯域幅を低く保つためのMMO技術、アルゴリズム、およびリソース?


9

現在のMMOがアクションと移動データを圧縮からクライアントでの処理にどのように処理するかに関するリソースとドキュメントはありますか?動き予測アルゴリズムのリソースはありますか?

私はwsadの動きがあり、レイテンシを低く保つことに重点を置いているものに特に興味があります。また、さまざまなタイプのMMO(ネットワークに関して)のパケットレートとサイズは何ですか。

プレーヤーが到達できない場合、または後でパケットを確認できない場合に、パケットレートをスケーリングしたり、一部のパケットを完全に無効にする方法はありますか?

回答:


9

さて、この本があります-これは少し古く、私は実際にそれを読んだことがありませんが、評判の良い出版社からです。新しいものも見つけましたが、今まで聞いたことがありません。どちらもMMO(または少なくともオンライン)ゲーム開発の問題をカバーすると主張しています。とは言うものの、クライアント側の予測は、同時プレーヤーベースの規模に関係なく、ほぼ同じであり、Googleにはそれに関する多くの情報があります。

実用的な観点から見ると、インディー/ホビーの開発者にとって、「大規模」と見なされるのに十分な理論的ピーク同時実行性を達成するのに十分なプレーヤー獲得するのに十分人気のあるゲームをまとめることはかなり難しいことを理解することが重要です。しかし、この手法は研究にとって教育的である可能性があります。

実行できることには、主に2つの分類があります。

  • 最小限のデータのみを必要とするクライアントの最小限のセットに送信することを積極的に行ってください。
  • プレイヤーが集中しすぎないようにインセンティブを与えないゲームを設計し、「必要なクライアントのセット」を一般的に小さく保つのに役立ちます。

2番目の問題は、実際にはゲームデザインとソーシャルマニピュレーションの問題です。マルチプレイヤーゲームは自然にソーシャルであり、その魅力の一部であるため、プレイヤーのクラスターをあまり落胆させたくないので、特にトリッキーです。一方、世界中の誰もがゲームで最高の戦利品を落とす1人の男をスポーンキャンピングするゲームは、スケーリングが難しくなります。

最初のオプションとして、段階的なメッセージングを検討することができます。他のプレーヤーについては、ポジションなど常に知っておくべき重要なことがいくつかあります。しかし、ヘルスなどの他のことは、現在のプレーヤーがまだ見ることができないオブジェクトにとってはそれほど重要ではない可能性があるため、近くにある他のすべてのエンティティの相対距離に基づいてそのプレーヤーに送信するものをゲートします-これは基本的にスロットルです質問の最後の部分で述べたように、送信したデータとそれをフィルタリングします。

非常に大規模なマルチプレーヤーアーキテクチャでは、すぐにアクションを実行する必要がないレポートもバッファリングされます。サーバーに送信される文字保存メッセージはデルタで行うことができ、重要なポイントでのみ完全な更新が行われます。これらの更新はスロットルサーバーでバッファリングされ、実際に文字データを安定して保持するサーバーに送信されます。定期的な方法-プレーヤーのベースが拡大するにつれて、ディスクIOとネットワークトラフィックの最適化について心配する必要があります。キャラクターデータベースをスラッシュさせたくない。

パケットのレートとサイズは、MMO以外のゲームと同様に、ゲームによって大きく異なります。これは実際には非常に要件固有のものであり、一般化された標準はありません。


1
最初の本(Massively Multiplayer Game Development 2)の続編もあります。私の考えでは、これはそれほど有用な本シリーズではありません(ほとんどのゲーム開発本のように、MMOの作成から開始までの時間の本ではありません)が、理論的な問題のいくつかについては説明していますこの質問で尋ねました。また、MMOを部分的に開発したことがある人にとっては、もっと役立つかもしれません。
リケット

5

上記の回答に加えて、TCP_NODELAYとウィンドウスケーリングの動作方法を確認してください。TCPの詳細を理解し(そして、はい、順不同で到着する差分更新を処理する見通しが面白くない限り、UDPではなくTCPを使用したいと思います)、再送信は遅延制御にとって重要です。


4
差分更新(通常はゲーム内構造のバイナリ差分)を使用していて、順序どおりに配信されないもの(信頼できるかどうかに関係なく)を使用する場合は、後悔することを繰り返します。ゲームでTCPを嫌う人は、一般にそれについて十分に知りません(NODELAYが何をするかを知るなど)。UDPは、音声データのようなものに意味があり、順序が正しくないパケットを単純にドロップできますが、これはゲームではほとんどありません。
coderanger、2011年

1
「まれにゲームのケース」?サーバーが私にすべてのフレームで信頼できるゲーム状態を提供しているという条件で、私は過去に何が起こったかを気にしません。UDPパケットからの単純な単調増加するフレーム番号は、これに最適です。確実に送信するために実際に必要なデータ量はどれくらいですか?
ChrisE、2011年

2
「サーバーが私にすべてのフレームに信頼できるゲーム状態を与えていることを提供します」確かに、あなたがそれを与えられたものとして扱うなら。「差分更新を使用している場合」と言ったことに注意してください。これは、フレームごとに完全な状態をストローブするのとは逆になります。あらゆるレベルの複雑さを伴うMMOでは、完全な更新を頻繁に出荷することは急速に不可能になります。
coderanger、2011年

1
変化するものの完全な状態を送信したとしても、物事をマージすることが不可能になる可能性がある、順序どおりの配達の問題に終わります。「x = 1、y = 2」、「y = 1、z = 2」という更新を考えてください。それらが逆方向に到着した場合、yの値が正しいように「最初の」値をドロップする必要がありますが、xへの変更は失われます。
coderanger、2011年

1
@Adamこれが、TCP仕様を読み、ウィンドウスケーリングがどのように機能し、それが再送信とどのように相互作用するかを理解する必要があると私が言った理由です;-) TCPの書き換えは基本的に常に間違っており、それを台無しにする可能性はほぼ100%です。信頼できる順序どおりの配信が必要な場合は、UDPを使用しないでください。
coderanger、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.