読み取りの間にドロップされたパケットに関係なく、最新の受信 UDP パケットを読み取る必要があります。着信パケットは、アプリケーションの最大処理速度の 3 倍の速さで入ってきます。これを実現するためにsetReceiveBufferSize(int size)
、Java のDatagramSocket
クラスを使用SO_RCVBUF
して、予想されるパケットと同じサイズ (バイト単位) に設定しました。
ただし、最新のパケットを取得する前に、まだ 3 パケットの遅延があります (着信速度が受信速度の 10 倍の場合、10 パケットの遅延があります)。SO_RCVBUF
これは、最新のパケット以上のものを含むことを示唆しています。
まず、単位はsetReceiveBufferSize(int size)
バイトですか?javadocsには明示的に記載されていません。SO_RCVBUF
次に、最新の着信パケットのみを受信するように無効にする方法はありますか? たとえば、ゼロは関数の引数として正しくありませんが、理論的には受信バッファー サイズを 1 に設定できます。