1

私はマルチプレイヤー ゲームを開発していますが、あるクライアントから別のクライアントにサーバー経由で接続する方法がわかりません。どこから始めればよいですか?メッセージ データをドロップできる通信フレームワークを提供する気まぐれなオープン ソース プロジェクトはありますか? それとも、複雑なマルチスレッド ソケット コードを大量に記述する必要がありますか? クライアントが電話で実行されている場合、状況はまったく変わりますか?

私は言語にとらわれませんが、Flash または Qt のフロント エンドと Java サーバーがあれば理想的ですが、それは少し貪欲かもしれません。

私はグーグルで数時間を費やしましたが、トピック全体が私にとって初めてで、少し迷っています。この質問にタグを付ける方法など、あらゆる種類の助けをいただければ幸いです。

4

4 に答える 4

1

通常、ゲーム エンジンは遅延のために UDP パケットを送信します。実際のところ、TCP は十分な速さではなく、速度よりも信頼性の方が重要です。

Web サービスは、追加のオーバーヘッドにより、TCP に固有の遅延の問題を悪化させます。さらに、予想されるプレーヤーの数に応じてメモリを消費します。最後に、必要のない大量のペイロード オーバーヘッドがあります (xml の誰か?)。

これにはいくつかの方法があります。1 つの方法は、集中型メッセージング (クライアント/サーバー) です。これは、クライアントからの udp パケットをリッスンする Java サーバーがあることを意味します。次に、それらを関連するユーザーに再ブロードキャストします。

2 番目の方法は分散型 (ピア ツー ピア) です。クライアントはサーバーに登録して、それがどのゲーム/世界にいるかを述べます。そこから、その世界の他のクライアントのリストを取得します。サーバーはそのリストを維持し、他のクライアントに参加/脱落者を通知します。

その時点から、クライアントは udp パケットを他のユーザーに直接ブロードキャストします。

于 2009-10-27T21:45:12.810 に答える
1

待ち時間が大きな問題ではない場合は、いくつかの Web サービスを実装してメッセージ パッシングを行うことができます。これはあなたが思うほど遅くはなく、言語間で簡単に実装できます。欠点は、クライアントが更新を取得するためにサーバーをポーリングする必要があることです。そのため、あるクライアントから別のクライアントに到達するのに数百ミリ秒かかる場合があります。

組み込みの Flexメッセージング インターフェイスを使用することもできます。そこには、クライアント同士のやり取りを可能にするための規定があります。

于 2009-10-27T21:35:55.280 に答える
0

Flash Media Interactive Serverを調べることもできます。また、Java実装が必要な場合は、WowsaまたはRed5を調べることもできます。これらはAMFを使用し、接続されたクライアント間でのShareObjectの同期など、ShareObjectのネイティブ機能を提供します。

ただし、これらはピアツーピアではありません(まだ、すぐに聞こえます)。サーバーが管理する集中型メッセージングを使用します。

幸運を

于 2009-10-28T17:54:20.377 に答える
0

高性能の通信フレームワークを探している場合は、ACE C++ フレームワーク (Java バインディングを備えています) を調べてみてください。

公式ウェブサイト: http://www.cs.wustl.edu/~schmidt/ACE-overview.html

于 2009-10-28T13:30:20.803 に答える