在Javascript Websocket消息中读取Blob的内容

时间:2019-06-09 00:16:16

标签: javascript websocket

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

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

我的问题有两个:

  • 在用c ++(我正在编写服务器的语言)对二进制数据进行操作时很简单,但是在Javascript中似乎很难。

  • 我发现您可以使用ArrayBufferUInt8Array来执行大多数操作,并且可以很好地发送消息。

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

ws.onmessage = function(evt) {
    var data = null;
    data = await new Response(evt.data).arrayBuffer();
}

但这给了我错误:

SyntaxError: await is only valid in async functions and async generators

该方法似乎是异步的,虽然我确定我可以用这种方法来做,但乍一看似乎并不那么好。

我已经意识到,以文本形式发送数据会使evt.data以字符串形式出现,这使我相信可以为数据包使用JSON格式,而不是二进制格式。

我真的不想使用JSON,因为某些数据包中将充满很多信息,而且我担心它会增加不必要的膨胀。

我认为我真正想要的只是能够将evt.data读为ArrayBuffer,因为这似乎是性能最高的。

1 个答案:

答案 0 :(得分:1)

使用promise的then方法

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

then arrayBuffer

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