13

MMORPG クライアント/サーバー通信で UDP および TCP プロトコルはどのように使用されますか?

例えば:

クライアントは UDP 経由でサーバーにブロードキャスト (プレーヤーの位置など) を行いますか? またはその逆?

それとも、サーバーがプレーヤーを移動するようにクライアントが要求する TCP を使用するのに似ていますか。サーバーはリクエストを受信し、プレーヤーを移動して、プレーヤーが現在位置 xyz? にいることをクライアントに送り返します。

チャット チャネルは TCP を使用して実装する必要がありますか?

これに関する良い記事/本はありますか?私は小片を見つけましたが、本当の肉とジャガイモは経験から得られたようです.

4

9 に答える 9

8

多くのゲームは UDP を動作関連のアクティビティに使用します。たとえば、歩いているときなどに、多数の UDP リクエストが送信される可能性があります。それが有効かどうかはサーバーが最終的に制御しますが、すべてのパケットがサーバーに到達するかどうかは必ずしも気にしません。これが、多くのゲーム クライアントが何らかの予測メカニズムも使用する理由です。

2番目の言及に関しては、はい、すべてのコントロールがサーバーによって管理されることは非常に一般的です。クライアントがサーバーに何もブロードキャストしないようにします。人々がハッキングするのを防ぐために、サーバー側でエラーと入力処理を行う必要があります。1 秒あたりの入力を制限することもできます。

いずれにしても、UDP と TCP の組み合わせが適切です。「信頼性と速度のどちらが必要か」を自問する必要があります。

于 2008-10-17T18:44:28.913 に答える
4

さまざまな実装が考えられますが、ほとんどの場合、次のようになります。このパターンは、ゲームの世界のほとんどすべてのアクションで繰り返されます。

  1. クライアントは、プレイヤーが移動したいサーバーに通信します。
  2. クライアントは、起こるべきであると考えるものに従って動くプレイヤーを表示します。
  3. サーバーは、プレイヤーの位置から移動が発生する可能性があることを検証します。
  4. サーバーは、サーバーに関する限り、プレーヤーがどこにいるかについてクライアントを更新します。
  5. クライアントは、サーバーのワールドステートを反映するようにプレーヤーの位置を更新します。
于 2008-10-17T18:45:03.683 に答える
4

クライアントが真実の情報を渡すことに頼ることはできません。誰かがプロトコルをハッキングしてチートします。データを暗号化してもこれは止まりません。少し難しくするだけです。

クライアントは動きなどのリクエストのみを送信する必要があり、サーバーはリクエストがゲームのルールに違反していないことを確認するためにサニティ チェックを行う必要があります。サーバーは、クライアントが絶対に必要とするデータのみを送り返す必要があります。クライアントに依存してワールド データのチャンクを取得し、プレーヤーが現在観察できないすべてのものを除外することはできません。誰かが余分な情報を入手して悪用します。

ゲームが「リアルタイム」である必要がある場合、クライアントは、サーバーが移動要求を許可し、それに応じて表示を更新すると想定する必要があります。サーバーが後で修正する場合は、移動をロールバックします。ほとんどの場合、クライアントとサーバーは一致し、すべてがスムーズに流れます。クライアントが不正行為をしようとしている場合 (とにかくこれは彼らのせいです)、またはクライアントが接続不良のためにひどく遅れている場合 (それについてできることはあまりありません)、彼らは同意しません。

于 2008-10-17T18:45:36.600 に答える
1

他の人がこれらのタイプのシステムをどのように実装しているかを読むことで、多くのことを学ぶことができると思います。その無駄で、ティム・スウィーニークロッケー・コンソーシアムの仕事を指摘してもいいですか

  1. Unreaネットワーキングアーキテクチャ
  2. クロケプロジェクト

ティム・スウィーニーの論文は、私がプログラミングについて考える方法を変えました。私はそれらを十分に推薦することはできません。

于 2008-10-17T18:58:26.717 に答える
1

あなたの質問の半分(使用されているトランスポート層プロトコル)は、wiresharkをインストールしてトラフィックを調べることで答えることができます。

于 2008-10-17T18:39:04.400 に答える
1

Project Darkstarに興味があるかもしれません。オープンソースの MMO フレームワークです。

于 2008-10-17T18:45:33.933 に答える
0

プレイヤーとしての観察以外の詳細はわかりませんが、ほとんどのゲームは、サーバーの応答がキャラクターを動かすのを待たないので、ターン制でなければユーザーエクスペリエンスが失われます。発生したように見えるのは、移動がクライアント側で行われ、サーバーに送信され、サーバーがそれらのメッセージを他のプレーヤーに送信することです。少なくともWoWでは、プレーヤーが遅れている場合、プレーヤーがまだ前進しているのを見ることができ、後で魔法のように別の場所に表示されます。これは、クライアントが位置データ以上のものを受信するだけでなく、移動していることと移動している方向を示していることを示しています。次に、それ以上のデータがない場合の動きを推定します。

于 2008-10-17T18:39:47.800 に答える
0

最善の策は、おそらくPlaneshiftのネットワークコードを確認することです。これはオープンソースのMMOです。シーンで最も開発されていると思います(最後にチェックしました)。

于 2008-10-17T18:44:06.590 に答える
0

この質問に対する簡単な単一の答えはないと思います。その範囲はかなり広いです。それでも、いくつかのポイント:

  • UDP を使用しているからといって、「ブロードキャスト」する必要はありません。私の経験では、UDP はほとんどの場合ポイントツーポイントです。
  • UDP を介して独自の「安全な」通信を行うことは完全に可能です。TCP を使用する必要はありません。それは魔法のようなものではなく、ただ... 巧妙で複雑です。:)しかし、ほとんどの場合、あなたが暗示しているように、TCPはゲームでのリアルタイムっぽい通信には適していません.
  • TCP をより適したものにする方法があります。たとえば、「Nagle アルゴリズム」を検索してください。
  • 独自のロスレス トランスポート プロトコルをその上に既に展開している場合は、UDP を介してチャットできます。これに多くのゲーム。

Gamasutra でのネットワーキングに関する記事がありましたが、現在手元にあるリンクはありません。それらがまだ公開されているかどうかはわかりません。申し訳ありません。

于 2008-10-17T18:46:00.267 に答える