我一直在尝试将 WebRTC 数据通道用于游戏,但是,在玩 50-70 秒后,我无法在不达到队列大小限制 (8KB) 的情况下持续发送实时玩家数据。
因为数据需要是实时的,我对乱序的数据没有用处。我已经使用以下属性初始化了数据通道:
negotiated: true,
id: id,
ordered: true,
maxRetransmits: 0,
maxPacketLifetime: 66
MDN 文档说缓冲区不能以任何方式更改。
无论如何我可以在不超过缓冲区空间的情况下持续发送数据吗?我不介意清除缓冲区空间,因为它只包含随时间阻塞的数据。
注意:数据一直在传输,直到缓冲区大小超过 8KB 空间。
编辑:我忘了补充一点,这个问题只有在双方位于不同的网络上时才会发生。当两者都在同一个局域网内时,没有缓冲(我想是因为带宽更高)。我尝试添加多个数据通道(8 个并行)。然而,这只增加了故障再次发生之前的时间。所有 8 个缓冲区都已满。我还尝试在每次缓冲区接近满时创建一个新通道,并在关闭前一个已满的 DC 时切换到新的 DC,但我发现缓冲区空间是困难的方式(阅读MDN Docs中的注释)不会立即释放,而是尝试传输缓冲区中的所有数据,从而占用宝贵的带宽。
提前致谢。