ゲームエンジンの設計:マルチプレーヤーおよびリッスンサーバー[終了]


10

私のゲームエンジンは現在、シングルプレイヤーパーツで構成されています。私は今マルチプレイヤーパートをどうやってやるかについて考え始めています。

多くのゲームには実際にはシングルプレイヤーモードがないことがわかりましたが、単独でプレイすると、実際にローカルサーバーもホストしていて、ほとんどすべてがマルチプレイヤーであるかのように実行されます(データパケットを渡すことができることを除いて)パフォーマンスを向上させるための代替ルート経由)

私のエンジンは、このモデルに適応するために大きなリファクタリングを必要とするでしょう。3つの可能なモードがあります:専用クライアント、専用サーバー、およびクライアントサーバー(リッスンモード)

  • ゲーム業界でリッスンサーバーモデルはどのくらいの頻度で使用されますか?
  • それの(不)利点は何ですか?
  • 他にどのようなオプションがありますか?

4
最初の質問はかなり無関係です。なぜそれが業界でどのように行われるかが重要なのでしょうか?彼らはすべてを最善の方法で行うわけではありません。
共産主義者のダック

回答:


11

私ができる限りこれに答えられるかどうかを確認します。

ゲーム業界でリッスンサーバーモデルはどのくらいの頻度で使用されますか?

ほとんどのオンラインゲームについて言えば、大多数のゲームがクライアント/サーバーアーキテクチャを使用していることがわかりますが、常にあなたが考える方法ではありません。たとえば、任意のソースゲームを取ります。ほとんどは、マスターサーバーアーキテクチャを備えた標準のクライアントサーバーを使用し(利用可能なゲームを一覧表示するため)、1人のユーザーが専用サーバーをホストし、クライアントを持つ誰もがそれに参加できます。

ただし、いくつかのゲームとサービスがあります。たとえば、Left 4 Dead、League of Legends、Xbox Liveゲームなど、少し異なるアプローチを取ります。これらはすべて、制御サーバーでクライアントサーバーアーキテクチャを使用します。ここでの主なアイデアは、誰かがゲームを「実行」していない専用サーバーを作成することです。制御サーバーは種類の「ロビー」を作成し、ゲームが開始されると、制御サーバーはそれらをキューに追加し、ロビーの順番になると、一致する専用サーバーを選択します(場所/速度、可用性、多数の要因)、そしてプレーヤーをそのサーバーに割り当てます。そうして初めて、サーバーは実際にゲームを「実行」します。同じ考え方ですが、クライアントがサーバーを「選択」する必要がないため、少し単純化されています。

もちろん、最大のクライアントサーバーモデルはMMOモデルで、1つまたは複数のサーバーが、ほぼすべてのデータとロジックを処理する永続的な世界を実行します。このモデルを使用した有名なゲームには、World of Warcraft、Everquestなどがあります。

では、リッスンサーバーはどこに収まるのでしょうか。正直なところ、それほどよくはありませんが、それを使用するゲームはまだたくさんあります。たとえば、ほとんどのソースゲームではリッスンサーバーの作成が許可されており、多くのXBox Liveゲームでは作成できます(久しぶりですが、Counter StrikeやQuake 4など)。ただし、一般的には、クライアント/サーバーモデルの利点により、次のポイントに進むため、不満を感じるようです。

それの(不)利点は何ですか?

何よりもまず:パフォーマンス。クライアント/サーバーモデルでは、クライアントはゲームの各サイクルでローカルの変更(入力、グラフィックス、サウンドなど)を処理します。サイクルの最後に、関連データ(プレーヤーが移動したか、移動したか、移動したか、現在どこを見ているか?速度?撃ったか?移動した場合、弾丸に関する情報など)がパッケージ化されます。など)、それをサーバーに送信して処理します。サーバーはこのデータを受け取り、ハッキングを示す方法でユーザーが移動しているか(後で詳しく説明します)、移動は有効か(何か邪魔ですか)、プレーヤーからの弾丸を実行したかなど、すべてが有効かどうかを判断します1ヒットプレイヤー2?など。次に、サーバーはこれをパッケージ化し、クライアントに送信します。クライアントは、プレーヤーが撃たれた場合のヘルスの調整、ハッキングされていると判断された場合のプレーヤーのキックなど、必要に応じて更新します。

ただし、待機サーバーは、これらすべてを同時に処理する必要があります。あなたはプログラミングに精通していると思いますので、おそらくゲームがコンピューターからどれほどのパワーを奪うことができるかを理解しているでしょう。ネットワーク処理、セキュリティ処理に追加し、より多くのだけでなく、単に標準的な処理が進むにつれて、パフォーマンスは、少なくともこれまでのように、深刻な打撃を受けるだろう場所をクライアントのゲーム、あなたが見ることができます。さらに、ほとんどのサーバーは高速ネットワークで実行され、ネットワークトラフィックに耐えるように設計されたサーバーです。リッスンサーバーのネットワークが遅い場合、ゲーム全体が影響を受けます。

第二に、セキュリティは先に述べたように、サーバが行います主なものの一つは、プレイヤーがゲームを悪用されているかどうかです。これらをPunkbuster、VACなどと見たことがあるかもしれません。これらのプログラムを実行する非常に複雑なルールのセットがあります。たとえば、ハッカーと非常に優れたプレーヤーとの違いを決定します。ハッカーを捕まえることができなければ、ゲームにとって非常に悪いことになりますが、誤って非難されたものに対してアクションを実行した場合はさらに悪いことになります。

リッスンサーバーは通常、クライアントのゲーム、サーバー処理、およびハック検出を処理できません。ほとんどの場合、Punkbusterなどのディテクターは、リッスンサーバーで実行することが不可能ではないにしても、非常に困難です。通常、ゲームロジックはセキュリティよりも優先されるため、必要な処理能力がないと正しく機能しません。検出器が1フレームの処理を許可されていない場合、有罪判決に必要なデータを失う可能性があります。

最後に、ゲームプレイ。サーバーの最大の特徴は、サーバーが永続的であることです。つまり、全員が離れても、サーバーは引き続き実行されます。これは、夜間に活動が少ない人気のあるサーバーがある場合に役立ちます。人々は、プレーの準備ができてもオンラインに戻るのを待つ必要がなくても参加できます。

リッスンサーバーでの主な欠点は、リッスンサーバーをホストしているクライアントが離れるとすぐに、ゲームを別のプレーヤーに転送する(場合によっては数分間続く可能性のあるゲームを作成する)か、完全に終了する必要があることです。ホストはオンラインのままであるか(サーバーのスロットと彼/彼女のコンピューターの電源を浪費しているため、ゲームが遅くなる可能性があります)、またはすべてのユーザーのゲームを終了する必要があるため、これは大きなサーバーでは望ましくありません。

ただし、これらの問題にもかかわらず、待機サーバーにはいくつかの利点があります。

設定が簡単:ほとんどのリッスンサーバーは、「新しいゲーム」にアクセスして参加を許可するだけです。これは、友達と遊んだいだけで、空の専用サーバーを探したり、他の人と遊んだりしたくない人にとっては簡単です。

テストに最適:専用サーバーを所有していて、その構成を変更したい場合は、通常、テストすることをお勧めします最初の構成。ユーザーは専用サーバーのバックアップを作成し、盲目的に変更に入る必要があります。唯一のオプションは、何か問題が発生した場合にロールバックし、新しい専用サーバーを作成してテストするか、単純なリッスンサーバーを作成するだけです。それらをテストします。そして、ポイント1では、これらの方が一般に起動と構成が簡単です。これは特に当てはまります。ほとんどの専用サーバーは管理者のすぐにアクセスできないためです(ほとんどの専用サーバーはリモートの場所からレンタルされます)。管理者が現在使用しているマシンよりも、構成の変更や再起動用のコマンドなどをリモートの場所にプッシュするのに、はるかに長い時間がかかります。

リソースが少ない:ほとんどの専用サーバーでは、同じIPを持つユーザーは専用サーバーに接続できません(つまり、クライアントはサーバーをホストするか、再生する必要があります。両方を行うことはできません)。クライアントが自分のサーバーでプレイする場合は、通常、サーバーをホストする2台目のマシンが必要です。または、実際にプレイできるように専用サーバーを購入またはレンタルする必要があります。リッスンサーバーに必要なマシンは1つだけです。これが、クライアントが使用できる唯一のマシンである場合があります。

どちらの場合も、どちらにも長所と短所があり、それらを設計および実装したいものと比較検討する必要があります。私の経験から、リッスンサーバーを実装すると、友人と遊んだり、設定をテストしたい数人のユーザーにしか使用されないと思われます。

最後に:

他にどのようなオプションがありますか?

これはワームの産業用缶です。実際には、あらゆるタイプのネットワークアーキテクチャをビデオゲームに適用できます。ただし、私が見てきたことから、ほとんどのインターネット通信と同様に、ほとんどは何らかの形のクライアント/サーバーモデルに要約されます。

私があなたの質問に答えなかった場合、または何か拡張する必要がある場合は、私に知らせてください。そうすれば、私ができることを確認します。


「ほとんどの専用サーバーでは、同じIPを持つユーザーは専用サーバーに接続できません(つまり、クライアントはサーバーをホストするかプレイする必要があり、両方を実行することはできません)。」WAT?どこ?どうして?一部のサーバーにこの明らかに意味のない恣意的な制限がある場合でも、書き込み時に同じことを強いられるわけではありません...
o0 '。

これは、コンピューターがサーバーアルゴリズム、グラフィック計算、ゲームロジックを一度に処理できなかった昔のゲームの成果物です。多くの専用サーバーモデルは、同じマシンから接続を試みたクライアントが正常に接続するのを妨げますが、この慣習は現在でも一部のゲームで実施されています。これがすべてのモデルに当てはまるとは言ったことも、この特定のパラダイムに合わせてモデル化する必要があるとは言いませんでした。ただし、技術的には、同じホスト接続を許可すると専用サーバーの目的が無効になり、唯一の利点は切断時にサーバーをアクティブにしておくことです。
shmeeps 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.