我正在編寫基于 WebSocket 的客戶端服務(wù)器。我想發(fā)送原始二進(jìn)制數(shù)據(jù),然后由客戶端解碼。我的問題有兩個(gè):雖然在 C++(我正在編寫服務(wù)器的語言)中對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行操作很簡單,但在 Javascript 中似乎很難。我發(fā)現(xiàn)您可以使用ArrayBuffers 和UInt8Arrays 來執(zhí)行大部分操作,這對(duì)于發(fā)送消息非常有效。我的問題是,當(dāng)我嘗試接收消息時(shí),如果我在服務(wù)器端將消息聲明為二進(jìn)制,它會(huì)Blob在客戶端顯示為 a 。我曾嘗試將 Blob 轉(zhuǎn)換為ArrayBuffer這樣的:ws.onmessage = function(evt) { var data = null; data = await new Response(evt.data).arrayBuffer();}但這給了我錯(cuò)誤:SyntaxError: await is only valid in async functions and async generators看起來這個(gè)方法是異步的,雖然我確信我可以這樣做,但一開始它看起來并不是那么好。我已經(jīng)意識(shí)到以文本形式發(fā)送數(shù)據(jù)會(huì)使數(shù)據(jù)evt.data顯示為字符串,這讓我相信我可以對(duì)數(shù)據(jù)包使用 JSON 格式而不是二進(jìn)制格式。不過我真的不想使用 JSON,因?yàn)橛行?shù)據(jù)包會(huì)充滿大量信息,我擔(dān)心它會(huì)增加不必要的膨脹。我認(rèn)為我真正想要的只是能夠?qū)?讀取evt.data為ArrayBuffer,因?yàn)檫@似乎是性能最高的。
在 Javascript websocket 消息中讀取 Blob 的內(nèi)容
慕妹3146593
2021-06-15 17:23:41