问题背景
在使用 Deno 编写 WebSocket 应用程序时,我们会遇到一个问题:WebSocket 无法接受二进制数据。具体来说,当我们尝试从 WebSocket 接受二进制数据时,Deno 会将其解析为字符串,而不是二进制数据。
这个问题的根本原因是 WebSocket 的协议设计,它只允许传输文本数据,而不允许传输二进制数据。因此,Deno 在接收 WebSocket 数据时,会将其解析为字符串。
解决方法
要解决这个问题,我们需要使用一些技巧来绕过 WebSocket 协议的限制。以下是两种解决方法:
方法一:手动解析 WebSocket 数据
我们可以手动解析 WebSocket 数据,并将其转换为二进制数据。具体来说,我们可以使用 TextDecoder
和 Uint8Array
类来将 WebSocket 数据转换为二进制数据。
以下是一个示例代码:
-- -------------------- ---- ------- ------ - ----------- - ---- ----------------------------------------- ----- ------- - --- -------------- ----- --- - --- ----------------- ----- -- - --- --------------------------------- ------------------------------ ------- -- - ----- ---- - ----------- ----- ----- - --------------------- --------------- --------------------- ------ ------- ----- ---
在这个示例代码中,我们首先创建了一个 TextDecoder
对象和一个 Uint8Array
对象。然后,我们在 WebSocket 的 message
事件处理程序中,将接收到的数据解码为字符串,并将解码后的字符串转换为二进制数据,并将其存储在 buf
变量中。
方法二:使用第三方库
我们还可以使用第三方库来解决这个问题。例如,我们可以使用 ws
库来创建 WebSocket 应用程序。这个库支持二进制数据传输,并提供了一些方便的方法和事件。
以下是一个示例代码:
-- -------------------- ---- ------- ------ --------- ---- -------------------------------- ----- -- - --- -------------------------------- - ----------- -------------- --- ------------------------------ ------- -- - ----- ---- - ----------- --------------------- ------ ------- ------ ---
在这个示例代码中,我们首先导入了 WebSocket
类。然后,我们创建了一个新的 WebSocket
对象,并设置了 binaryType
属性为 arraybuffer
。这将告诉 WebSocket 库,我们希望接收二进制数据。
在 message
事件处理程序中,我们可以直接访问 event.data
属性,这个属性将包含二进制数据。
总结
在 Deno 中使用 WebSocket 传输二进制数据是一个常见的问题。我们可以使用手动解析 WebSocket 数据或使用第三方库来解决这个问题。无论使用哪种方法,我们都可以轻松地解决这个问题,并提高我们的应用程序的性能和效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65850773d2f5e1655dfaad21