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

17

我一直在查看整个Socket.IO文档,但是即使它们承诺已经有了,我仍然找不到一个简单、最小化的示例,说明如何在服务器和客户端之间发送二进制数据。

那该怎么做呢?


这是一个如何从服务器以缓冲区的形式发送图像并在客户端上呈现为HTML5画布的示例。 - 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
2个回答

15
事实上,这已经在文档中了。Socket.io的当前文档在Socket.emit下面说:

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

因此,如果你可以发送一个缓冲区,你就可以发送二进制数据。你需要做的就是将你的数据打包成一个Buffer对象。
您可能需要阅读Socket.io 二进制支持发送和接收二进制文件

4
啊,我之前理解错了。我搜索的方式有误。这是自动完成的,对吗?如果我发送一个 Float32Array,它会直接以二进制形式传输,而不是被序列化为 JSON? - MaiaVictor

3

从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!(如果您愿意)
干杯

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接