UDPパケットを待っているアクティブループを持つスレッドを実行しています。UDPデータグラムパケット受信ループ遅延
メッセージを受信したときに処理します。
1秒あたり数個のパケット(〜20)を受信する必要があります。私はUDPパケットを受信した後にログインし、ミニマリストの例を取っている
while (socketUDP != null) {
message = new byte[6];
packet = new DatagramPacket(message, message.length);
try {
socketUDP.receive(packet);
command = new String (message, 0, packet.getLength());
} catch (IOException e) {
Log.e(LOG_TAG, LOG_TAG + " IOException: " + e.getMessage());
}
Log.d(LOG_TAG, "test");
}
挙動は、たとえば、私は1秒間に50個のUDPパケットを送信し、ので、誰もが失われていない、とされ、奇妙ですAndroidは50ログのテキストメッセージ "test"を表示するのに約3/4秒かかります!!
AndroidのVMは、バッファ内のすべてのパケットをどこかに保存して、可能であれば処理しているようです。
Androidでできるだけ早くデータグラムのパケットを処理する必要があります。
私は何かが足りないようです。
これを行う最善の方法は何ですか?
は時々あなたが参照している時間を確認してくださいログにも時間がかかるを更新し、そうではありません。第二に、私はログ受信時間を提案します。 – kosa
あなたの問題は何ですか/毎秒20または50のパッケージしか受け取らないという奇妙な動作ですか?はい、低レベルのネットワークハードウェアとソフトウェアは、いくつかのバッファリングを行います。 – zapl
@thinksteep私は受け取った直後にパケットを処理する必要があります。例えば。 doSomething(メッセージ); Log.dは単なる例です。 – Jorge