WebSockets并在发送时重用ArrayBuffers

时间:2012-12-26 04:30:32

标签: javascript html5 websocket arraybuffer typed-arrays

我使用Uint8Arrays和ArrayBuffers发送二进制数据。我每次都可以通过创建一个新的Uint8Array和ArrayBuffer来成功发送它。

出于性能目的(减少垃圾等),我想为下一条消息重用相同的Uint8Array和ArrayBuffer。在这种情况下,每条消息都有相同的字段,因此字节长度不是问题。我只是覆盖它。

但是,重用会导致发送的数据不正确。

我最好的猜测是,当前一条消息仍处于发送过程中时,我正在为下一条消息修改ArrayBuffer。这是问题吗?如果是这样,当WebSocket不再使用ArrayBuffer时,有什么办法可以检测到,所以我可以将它汇集起来吗?如果没有,还有什么可能导致这种行为?

谢谢!

1 个答案:

答案 0 :(得分:0)

显然这个错误只是我的一个逻辑错误。

为了以二进制形式发送内容,我编写了一个使用位移和整数加法的Message对象来填充Uint8Array。当我编写复位函数时,我只重置位置变量而不是数组值,假设它的函数只是正确地覆盖数组。

但是,由于向数组添加新值使用了addition(array [0] + = newvalue)而不是sets(array [0] = newvalue),因此任何新数据都会被旧值损坏。

我现在感觉有点蠢。

Dhruv Chopra和Kanaka的评论帮助我指明了正确的方向。我使用10秒间隔setTimeout函数进行了测试,它仍然给了我错误的值,这让我意识到这只是我的一个愚蠢的错误。我想赞扬他们,但我不知道如何。

仍然,非常感谢你的帮助!我很感激。

编辑:显然我只能在8小时后回答我自己的问题。明天我会这样做,以避免混淆。

编辑2:显然我现在可以提出意见。再次感谢。