2011-09-10 9 views
2

私はMMOゲームを構築しており、多くの人々が接続しているときには、多くの遅れがあります。私はUDPとTCPパケットを使用しています。 TCPは本当にうまく動作するように見えますが、UDPは5秒の遅延の後に来ることがあります。何が原因でしょうか?私はMongoDBを使用しており、クライアントごとに毎秒30回パケットを送信しています。ありがとう。UDPを使用すると巨大な遅延が発生します。どうして?

+0

私はこの質問にフォローアップしています。それは解決されましたか?以下の回答のうち正しいものはありましたか? Thx –

答えて

0

UDPプロトコルは、パッケージ配信の保証を行いません。だからあなたの問題はこの中にあるかもしれません。 http://en.wikipedia.org/wiki/User_Datagram_Protocol

+0

私はそれをチェックして、それはすべてのパケットが来ているようだが、5秒遅れているようだ。最初にサーバーを起動すると、すべて正常です。 2時間後、2秒後。 5時間後、5秒後など。すべての(ほとんどの..)パケットが到着していますが、遅れています。 – Eli

0

野生の推測:あなたのUDPパケットの受信パスには、メモリの割り当てが含まれ、そのメモリがリークします。パケットが多く受信されるほど、メモリの割り当てに時間がかかります。

0

は、私もここに推測しているが、状況は、アプリケーションがUDPパケットのためにポーリングしていることが考えられ、すべてのNミリ秒(あなたのFPSが20の場合のように、その後、Nは50ミリ秒になります)。

今のところ、あなたのPCは多くのUDPパケットを受信し、オペレーティングシステムによってスタックされていると推測されます。次に、これらのパケットをポーリングすると、あなたまたはオペレーティングシステムは一度にスタックをクリアしません。スタックが大きければ、ラグが大きくなる可能性があります。

私はどこかのルータでもスマートでUDPパケットを積み重ねようとしていると読んだと思います。しかし、私はそれを見たページを見つけることができません。

私はここに同様の質問を掲載しました:

Router gets unresponsive when using UDP

以上、残念ながら私はまだそれを回避する方法がわからない、私の現在の理論:)です。私の考えで考えられる1つの可能性は、毎回ネットワークをポーリングするのではなく、ネットワーク要求に即座に反応する個別のスレッドを使用することです。n ms。

関連する問題