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

Posted

技术标签:

【中文标题】如何将二进制数据从 Node.js socket.io 服务器发送到浏览器客户端?【英文标题】:How to send binary data from a Node.js socket.io server to a browser client? 【发布时间】:2014-07-27 02:49:29 【问题描述】:

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

它是怎么做的?

【问题讨论】:

Here 是一个示例,说明如何从服务器将图像作为缓冲区发送并在客户端的 html5 Canvas 上呈现。 @Viclib 你搞定了吗?请分享..!!! 啊,我有,我现在忘记了,抱歉没有更新。但据我记得,您所要做的就是从 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. 【参考方案1】:

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

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

所以,如果你可以发送一个缓冲区,你就可以发送二进制数据。您所要做的就是将您的数据打包到一个Buffer 对象中。

您可能想阅读Socket.io Binary Support 和Sending and Receiving Binary

【讨论】:

啊,那是我想念的。我搜索错了。那是自动的吗?如果我发送一个 Float32Array 它将只是作为二进制文件,而不是被序列化为 JSON?【参考方案2】:

从 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 也是):

How to send binary data with socket.io?

好处是它也可以在 android 上运行! (如果你愿意)

干杯

【讨论】:

以上是关于如何将二进制数据从 Node.js socket.io 服务器发送到浏览器客户端?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Socket.IO 向数组 (MongoDB) 添加数据? (node.js)

如何将 Asterisk ARI 与 socket.io 和 Node.js 一起使用

如何在 Node.js 中从请求参数获取经过身份验证的用户到 socket.io

如何在node js中解压二进制数据

将套接字从 python 发送到 Meteor (node.js)

Node.js - 如何从 app.js 外部发出 socket.io 事件?