5

私は順序付きセットを true に設定していますが、短時間 (1 秒未満) に多数 (1000 以上) のメッセージが送信されると、受信したメッセージがすべて同じ順序で受信されるわけではありません。

rtcPeerConnection.createDataChannel("app", {
   ordered: true,
   maxPacketLifeTime: 3000
});

必要に応じて、この奇妙な動作を再現するための最小限の例を提供できます。

また、bufferedAmountLowThreshold と関連するイベントを使用して、送信バッファ量が大きすぎる場合に遅延させます。2000 を選択しましたが、最適な数がわかりません。短期間に非常に多くのメッセージを送信する理由は、一度に送信されるデータの最大量をオーバーフローさせたくないからです。そのため、データを 800 バイトのパックに分割して送信します。繰り返しますが、1 メッセージの最大サイズがわかりません。

const SEND_BUFFERED_AMOUNT_LOW_THRESHOLD = 2000; //Bytes
rtcSendDataChannel.bufferedAmountLowThreshold = SEND_BUFFERED_AMOUNT_LOW_THRESHOLD;
const MAX_MESSAGE_SIZE = 800;

あまり多くのメッセージに分割されていない小さなデータの場合は、すべて正常に機能します。このエラーは、大きなファイルに対してのみランダムに発生します。

4

1 に答える 1

4

2016/11/01dataChannel.bufferedAmountに、イベントループタスク実行中に値が変化してしまうバグがあります。したがって、この値に依存すると、予期しない結果が生じる可能性があります。を手動でキャッシュdataChannel.bufferedAmountし、それを使用してこの問題を防ぐことができます。

https://bugs.chromium.org/p/webrtc/issues/detail?id=6628を参照してください

于 2016-11-01T14:41:17.030 に答える