读取Javascript websocket消息中Blob的内容

读取Javascript websocket消息中Blob的内容,javascript,websocket,Javascript,Websocket,我正在编写基于WebSocket的客户端和服务器 我想发送原始二进制数据,然后由客户端解码 我的问题有两方面: L> > Pc>在C++中对二进制数据进行操作(我正在编写服务器的语言)是直接的,JavaScript中似乎很难。p> 我发现,您可以使用ArrayBuffers和UInt8Arrays来执行大多数操作,这对于发送消息非常有效 我的问题是,如果我在服务器端将消息声明为二进制,那么当我尝试接收消息时,它在客户端显示为Blob。我已尝试将Blob转换为ArrayBuffer,如下所示:

我正在编写基于WebSocket的客户端和服务器

我想发送原始二进制数据,然后由客户端解码

我的问题有两方面:

    <> L> > Pc>在C++中对二进制数据进行操作(我正在编写服务器的语言)是直接的,JavaScript中似乎很难。p>
  • 我发现,您可以使用
    ArrayBuffer
    s和
    UInt8Array
    s来执行大多数操作,这对于发送消息非常有效

  • 我的问题是,如果我在服务器端将消息声明为二进制,那么当我尝试接收消息时,它在客户端显示为
    Blob
    。我已尝试将Blob转换为
    ArrayBuffer
    ,如下所示:

但这给了我一个错误:

SyntaxError:await仅在异步函数和异步生成器中有效

这个方法似乎是异步的,虽然我确信我可以这样做,但一开始它看起来并不是很好

我已经意识到以文本形式发送数据会使
evt.data
显示为字符串,这让我相信我可以使用JSON格式来代替二进制格式

不过我真的不想使用JSON,因为有些数据包将充满大量信息,我担心它会增加不必要的膨胀


我想我真正想要的是能够将
evt.data
作为
ArrayBuffer
读取,因为这似乎是最有效的方法。

使用承诺的then方法

new Response(evt.data).arrayBuffer().then(buffer=> {
//here you have the buffer
})

注意:await可以在用async关键字声明的函数中使用

new Response(evt.data).arrayBuffer().then(buffer=> {
//here you have the buffer
})