スループットを確認するために、Bluetoothチャットの例を変更しました。
UIに送信ボタンを用意しました。これは事前定義された番号を送信します。サーバーソケットへのバイト数と確認応答を待機します
ServerSocketは文字列を待機し、データを取得すると、確認応答を送信して応答します。
ここで、この接続のスループットは次のように計算しました。
データ送信の開始時刻を記録します。
確認応答を受信すると、終了時刻を記録します。
したがって、スループットは(データ送信サイズ+ ack受信サイズ)/所要時間になります。
結果は次のとおりです。
dataSent(KB)-------------------スループット(キロビット/秒)
1KB ~200Kbps
5KB ~560Kbps
10KB ~688Kbps
50KB ~512Kbps
アプリケーションから取得したデータの一部によると、1KBや5KBのような低データの場合、スループットは低くなります。40KB程度まで増加しますが、50KB程度になると減少し始めます。受信側でガベージコレクションが発生していることがわかります。これにより、遅延が増加します。
これが正しい振る舞いであるかどうか知りたいです。1KBや5KBのスループットのようにデータが少ないと、スループットが向上するのはなぜですか。遅延を増やす可能性があると私が考えることができる事実は何ですか。これで、送信者が受信者から確認応答を受信したときにスループットが計算されます(完全なラウンドトリップ計算)。データを送信し、すべてを受信した後、受信機でスループットを計算するように、1回のトリップにすることはできますか?私はこれを試しましたが、2つの電話にミリ秒の違いがあり、間違った結果が出ることがありました。正しい振る舞いを理解するのを手伝ってください。