gpt4 book ai didi

javascript - WebSocket 和发送时重用 ArrayBuffer

转载 作者:行者123 更新时间:2023-11-28 09:28:15 42 4
gpt4 key购买 nike

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

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

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

我最好的猜测是,当上一条消息仍在发送过程中时,我正在修改下一条消息的 ArrayBuffer。这是问题所在吗?如果是这样,有什么方法可以检测 WebSocket 何时不再使用 ArrayBuffer,以便我可以将其池化?如果不是,还有什么可能导致这种行为?

谢谢!

最佳答案

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

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

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

我现在感觉自己有点傻。

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

不过,非常感谢您的帮助!我很感激。

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

编辑2:显然我现在可以对评论进行投票了。再次感谢。

关于javascript - WebSocket 和发送时重用 ArrayBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036016/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com