ゲームに固有のネットワーク設計とトリックを探しています。私はいくつかの問題について知っており、それらのいくつかに対する部分的な解決策がありますが、まだ見えない問題がある可能性があります。これに対する明確な答えはないと思いますが、私は本当に好きな答えを受け入れます。私は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向けのソリューションも歓迎します。