如何使用 socket.io 发送原始数据

How to send raw data using socket.io

我正在尝试减少 socket.io 使用 websockets 时的带宽。我切换到二进制数据,但在浏览器开发人员控制台中查看,数据包发送为:

[ 'type of the packet (first argument of .emit)', associated data ]

我只使用一种数据包类型,因此这会导致不必要的开销 - 发送了无用的字节并且整个内容无缘无故地被 json 编码。

如何去掉数据包类型,只发送原始数据?

socket.io 是对 webSocket 的抽象。为了支持它提供的特性,它给消息增加了一些开销。消息名称就是这样的开销之一,因为它是一个消息传递系统,而不仅仅是一个数据包传递系统。

如果你想从传输中挤出所有字节,那么你可能需要摆脱 socket.io 并只使用一个普通的 webSocket,你可以在其中控制每个数据包的更多内容(尽管你会必须重新实现 socket.io 为您做的一些事情)。

在node.js中使用socket.io,您可以通过发送ArrayBuffer 或Buffer 来发送二进制文件。在浏览器中,您可以通过发送 ArrayBuffer 或 Blob 来发送二进制文件。