2012-12-26 31 views
1

我使用Uint8Arrays和ArrayBuffers發送二進制數據。我可以通過每次創建一個新的Uint8Array和ArrayBuffer來成功發送它。WebSockets和重複使用ArrayBuffers發送

出於性能方面的考慮(減少垃圾等),我想重複使用相同的Uint8Array和ArrayBuffer作爲下一條消息。在這種情況下,每個消息具有相同的字段,所以字節長度不成問題。我只是覆蓋它。

但是,重用會導致發送的數據不正確。

我最好的猜測是,我正在修改ArrayBuffer的下一條消息,而前一條消息仍在發送過程中。這是問題嗎?如果是這樣,有沒有什麼辦法可以檢測到ArraySuffer不再被WebSocket使用,因此我可以將它池化?如果不是,還有什麼可能導致這種行爲?

謝謝!

+1

你能分享一段代碼嗎? –

+1

您是否在Chrome和Firefox中遇到同樣的問題?你是否正在調用send並立即在相同的執行上下文中修改ArrayBuffer?怎麼樣設置一個非常短的setTimeout(即1)然後修改它。 – kanaka

回答

0

顯然,錯誤只是我的一個邏輯錯誤。

要發送二進制文件,我寫了一個Message對象,它使用位移和整數加法來填充Uint8Array。當我編寫我的重置函數時,我只在重置位置變量而不是數組值的前提下,假設它的函數會恰當地覆蓋數組。但是,由於向數組添加新值(使用addition(array [0] + = newvalue)而不是sets(array [0] = newvalue),所有新數據都被舊值破壞。

現在我覺得有點笨。

Dhruv Chopra和Kanaka的評論幫助我指出了正確的方向。我使用10秒間隔setTimeout函數進行了測試,但它仍然給我錯誤的值,這讓我意識到這只是我的一個愚蠢的錯誤。我想讚揚他們,但我不知道如何。

不過,非常感謝您的幫助!我很感激。

編輯:顯然我只能在8小時後回答我自己的問題。我明天會這樣做,以避免混淆。

編輯2:顯然我現在可以upvote評論。再次感謝。

相關問題