问题 如何从Node.js socket.io服务器向浏览器客户端发送二进制数据?


我一直在查看整个Socket.IO文档,但是,即使他们保证它存在,我也找不到一个简单的,最简单的例子,说明如何在服务器/客户端之间发送二进制数据。

怎么做?


5282
2018-06-05 22:58


起源

这里 是一个如何从服务器发送图像作为缓冲区并在客户端上的HTML5 Canvas上呈现它的示例。 - Oleg
@Viclib你做完了吗?请分享..!!! - H. Mahida
啊,我有,我已经忘记了这一点,抱歉没有更新。但据我记忆,你所要做的就是从Float32Array(或类似的)获得一个缓冲区(类似的东西: myData = new Float32Array([1,2,3,4]).buffer; 并发送通过 socket.io,即 socket.emit("foo",myData)。它会自动将其视为二进制数据。然后,在另一端,你必须将其转换回来: socket.on("foo",function(data){ data = new Float32Array(data); })。不过,我已经通过记忆写过,但我记得在博客文章中有关于发布的一个例子 socket.io 1.0。 - MaiaVictor


答案:


它实际上在文档中。 Socket.io的当前文档说明 Socket.emit

[...]将事件发送到由字符串名称标识的套接字。任何其他   参数可以包括在内。支持所有数据结构,包括Buffer [...]

因此,如果您可以发送缓冲区,则可以发送二进制数据。您所要做的就是将数据打包成一个 缓冲 目的。

你可能想读 Socket.io二进制支持 和 发送和接收二进制


10
2018-06-05 23:28



啊,那就是我所缺少的。我错了。那是自动的吗?如果我发送一个Float32Array,它将只是二进制,而不是序列化为JSON? - MaiaVictor
这也是我想知道的 - Greg Hornby


从socket.io 1.0开始,可以发送二进制数据。 http://socket.io/blog/introducing-socket-io-1-0/

在官方文档中,如何发送和接收二进制数据的方式并不明确。唯一的文件是:

var socket = new WebSocket('ws://localhost');
socket.binaryType = 'arraybuffer';
socket.send(new ArrayBuffer);

我建议你看看这个答案,在那里你可以找到服务器和客户端代码实现的基本例子(javascript和java):

如何使用socket.io发送二进制数据?

好的一面是它也适用于Android! (如果你希望)

干杯


2
2017-12-05 20:28