6

ゲームに固有のネットワーク設計とトリックを探しています。私はいくつかの問題について知っており、それらのいくつかに対する部分的な解決策がありますが、まだ見えない問題がある可能性があります。これに対する明確な答えはないと思いますが、私は本当に好きな答えを受け入れます。私は4つのカテゴリーの問題を考えることができます。

悪いネットワーク

クライアントから送信されたメッセージは、サーバーに到達するまでに時間がかかります。サーバーはそれらをFCFSで処理することはできません。これは、レイテンシーが高いプレーヤーに対して不公平であるためです。これに対する部分的な解決策はメッセージのタイムスタンプですが、そのためには2つのことが必要です。

  • クライアントの時計を信頼できるようになります。(これは不可能だと思います。)
  • 測定できる一定のレイテンシ。可変レイテンシーについて何ができますか?

多くのゲームはUDPを使用しているため、メッセージが失われる可能性があります。その場合、彼らはすでに持っている情報に基づいてゲームの状態を推定しようとします。接続が再び機能した後、推定された状態が正しいかどうかをどのように知ることができますか?

MMOゲームでは、サーバーは大量のクライアントを処理します。負荷を分散するための最良の方法は何ですか?ゲーム内の場所に基づいていますか?クライアントのグループをサーバーにバインドしますか?サーバーを介してすべてを送信することを回避できますか?

去るプレーヤー

これが発生したとき、私は2つの異なる動作を見てきました。ほとんどのFPSゲームでは、ゲームをホストしたプレーヤー(私は彼がサーバーだと思います)が他のプレーヤーを離れると、プレイできなくなります。ほとんどのRTSゲームでは、いずれかのプレーヤーが離れた場合、他のプレーヤーは彼なしでプレイを続けることができます。専用サーバーなしでどうやってそれが可能ですか?誰もが完全な状態を知っていますか?彼らはどういうわけかサーバーの役割を移していますか?

情報へのアクセス

次の問題は専用サーバーで解決できますが、専用サーバーがなくても解決できるのではないかと思います。多くのゲームでは、プレーヤーはゲームの完全な状態を知る必要はありません。RTSの戦場の霧とFPSの壁は良い例です。ただし、アクションが有効かどうかを知る必要があります。(たとえば、そこから私を撃つことができますか、それともマップの反対側にいますか?)この場合、クライアントは不明な状態への変更を検証する必要があります。これは、暗号プリミティブを巧みに使用することで解決できるもののように聞こえます。何か案は?

不正行為

上記の問題のいくつかは、信頼できるクライアント環境では簡単ですが、それを想定することはできません。たとえば、80%の通常のユーザー-20%の詐欺師環境で機能するソリューションはありますか?あなたは本当に機能する(そしてカーネルモジュールのようなばかげたものを必要としない)アンチチートソフトウェアを作ることができますか?

私はこの質問といくつかの回答https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-booksを読みましたが、他の回答は利用できない/制限されたコンテンツにリンクしています。これはプラットフォーム/OSに依存しない質問ですが、特定のプラットフォーム/OS向けのソリューションも歓迎します。

4

4 に答える 4

2

暗号化がこの種の問題を解決すると考えることは、非常に一般的で非常に悪い間違いです。もちろん、クライアント自体がそれを復号化できる必要があるため、完全に無意味です。あなたはセキュリティを追加しているのではなく、単に曖昧さを追加しているだけです(そしてそれはクラックされるでしょう)。

不正行為はゲーム固有です。完全に排除できないゲーム(FPSのエイムボット)もあれば、失敗しないとまったく不可能なゲーム(サーバーベースのターンゲーム)もあります。

一般に、このようなネットワークの問題は、予測と深く関係しています。予測は、せいぜい非常に複雑な問題であり、それに関する有名なValveの記事で非常によく説明されています。

于 2010-09-23T22:50:23.200 に答える
2

悪いネットワーク

待ち時間が長いプレーヤーは、新しいモデムを購入する必要があります。ゲーム内の1人の接続が悪いため、レイテンシーをさらに追加するのは良い考えではないと思います。または、レイテンシのわずかな違いを意味する場合、誰が気にしますか?FCFSを拒否した場合にのみ、処理が遅く複雑になります。

不正行為:エイムボットなど

あなたは本当に機能するアンチチートソフトウェアを作ることができますか?いいえ、あなたがすることはできません。彼らがあなたのプログラムを実行しているのか、あなたのように動作する別のプログラムを実行しているのかを知ることはできません。

不正行為:情報へのアクセス

信頼できる専用サーバーとの安全な接続があれば、許可されているよりも多くの状態を確認するなどの不正行為は不可能です。

暗号化によって不正行為を防ぐことができるゲームがいくつかあります。ポーカーのようなカードゲームでは、すべてのプレイヤーが「デッキをシャッフルする」チャンスがあります。ウィキペディアの詳細:メンタルポーカー

RTSまたはFPSを使用すると、理論的には、ゲーム状態の一部を暗号化できます。次に、それをすべての人に送信し、表示が許可されている部分または表示が許可されている部分の復号化キーのみを送信します。しかし、2010年にこれをリアルタイムで実行できるとは思えません。

たとえば、私が確認したい場合、あなたが実際に場所Bにいる可能性があることを確認します。次に、あなたがどこから来たのか、いつそこにいたのかを知る必要があります。しかし、あなたが以前に私にそれを言ったならば、私は私が知ることを許されていない何かを知っていました。後で教えてくれれば、信じてほしいことは何でも教えてくれます。以前に私に言って、暗号化して、検証する必要があるときに復号化キーを教えてくれたかもしれません。つまり、すべての移動を異なる暗号化キーで暗号化する必要があります。痛い。

ポーカーサイトを実装していない場合、とにかく不正行為は最大の問題にはなりません。

于 2010-09-23T23:52:07.040 に答える
2

サーバーはそれらをFCFSで処理することはできません。これは、レイテンシーが高いプレーヤーに対して不公平であるためです。

はい、できます。レイテンシーが変化するため、誰かがどれだけのレイテンシーを持っているかを正確に推測しようとすることは、もはや公平ではありません。

その場合、彼らはすでに持っている情報に基づいてゲームの状態を推定しようとします。接続が再び機能した後、推定された状態が正しいかどうかをどのように知ることができますか?

サーバーはまったく推測する必要はありません-サーバーは状態を知っています。クライアントは、接続がダウンしている間だけ推測する必要があります。接続がバックアップされると、新しい状態が送信されます。

MMOゲームでは、サーバーは大量のクライアントを処理します。負荷を分散するための最良の方法は何ですか?ゲーム内の場所に基づいていますか?

「最善の方法」はありません。ただし、地理的な分割はかなりうまく機能します。

サーバーを介してすべてを送信することを回避できますか?

信頼できない通信の場合のみ。一般的に帯域幅が非常に低いため、意味がありません。

ほとんどのRTSゲームでは、いずれかのプレーヤーが離れた場合、他のプレーヤーは彼なしでプレイを続けることができます。専用サーバーなしでどうやってそれが可能ですか?誰もが完全な状態を知っていますか?

多くのRTSゲームは、すべてのマシンで同時に完全な状態を維持します。

上記の問題のいくつかは、信頼できるクライアント環境では簡単ですが、それを想定することはできません。

一般に公開されているほとんどのゲームは、100%詐欺師の環境を想定する必要があります。

于 2010-09-24T09:45:20.137 に答える
1

多くの人がモバイルデバイスでゲームにアクセスしている場合、プレーヤーが受信状態の悪い場所にいるとき、または低速Wi-Fi接続に接続しているときに、「悪いネットワーク」が発生する可能性があります。したがって、人口の少ない地域で接続する人々の問題だけではありません。モバイルクライアントでは、「不良ネットワーク」が非常に頻繁に発生する可能性があり、通常、診断が非常に困難です。

UDPを使用するとパケットが失われますが、TCPおよびHTTPベースを使用するゲームでも、パケットが送信されたことが確認されている間、クライアントとサーバーの通信が遅くなり、クロールが遅くなるという問題が発生する可能性があります。通信の場合、パケット損失に対するUDP補正は、通常、パケットに何が含まれているかによって異なります。モーションデータについて話している場合、通常はパケットが受信されない場合、サーバーは前の軌道を補間して位置を変更します。通常、これがどのように処理されるかはゲームの習慣です。そのため、ゲームの種類で必要とされない限り、UDPを避けることがよくあります。多くの場合、ネットワークの待ち時間が長くなると、問題のあるゲームはユーザーが利用できる機能の量を自動的に減らし、ユーザーが蹴られたり、壊れた機能が多すぎたりすることなく、ゲームを操作できるようにします。

最適には、接続不良と遅延に関連するエラーを見つけ、それらが発生したときのクライアントとサーバーの状態を表示するのに役立つLogglyのようなロギングツールを利用できるようにする必要があります。この可視性により、ユーザーが経験して開発する一般的な問題を診断できます。それらに対処するための戦略。

最近ほとんどのゲームを離れるプレイヤーは専用サーバーを持っているので、この問題はほとんど議論の余地があります。ただし、場合によっては、サーバーを別のクライアントに変更できます。

不正行為 プレイヤーがどのように不正行為を行い、誰もハッキングできない不正行為防止システムを作成するかを予測することは非常に困難です。最近では、多くのチート検出戦略が、ロギングおよび行動分析情報データのヒューリスティック分析に基づいて、異常が発生したときにそれを特定し、レビューのためにフラグを立てています。あなたは間違いなく合理的な範囲でチートプルーフを試みる必要がありますが、人々が悪用している新しい欠陥を見つけることができる早期発見システムも本当に必要です。

于 2014-08-30T00:43:11.550 に答える