【问题标题】:How to stream a single float variable from client to backend with Node.js?如何使用 Node.js 将单个浮点变量从客户端流式传输到后端?
【发布时间】:2020-12-10 08:53:59
【问题描述】:

我正在浏览器中以大约 15 fps 的速度捕获数据,我想将这些数据流式传输到我的服务器。现在这只是一个浮点变量 (distance)。我正在使用 socket.io-stream 和 socket.io 在服务器和客户端之间进行通信。基本的 io.emit() 和 io.on() 事件正在工作,但我一生都无法弄清楚如何流式传输单个 var——我什至尝试将单个浮点数转换为 Blob(),和ArrayBuffer,但是我在服务器上看不到数据更新。

这是我的前端代码:

var distance = new Blob([0]) // init distance var to be streamed
var stream = ss.createStream();

ss(socket).emit('distanceStream', stream, {"DistanceStreamData":distance});
ss.createBlobReadStream(distance).pipe(stream);

...

function update(){
  ...
  distance = new Blob([myDynamicallyChangingFloatVar]) 
  ...
}

后端:

io.on('connection', function(socket) {
  ss(socket).on('distanceStream', function(stream, data) {
    console.log("got the stream!",stream,data)
  });
});

我在服务器端的console.log() 只是打印完整的Stream 对象,数据只是"DistanceStreamData":{}

所有在线示例都使用fs 并流式传输文件数据或二进制数据,但我只想流式传输在浏览器中计算的单个浮点变量。另外请让我知道是否有更简单的方法来执行此操作(或者即使我用 socket.io-stream 吠叫错误的树。我最初想每秒调用 io.emit() 15 次在浏览器中,但觉得这可能不是解决这个问题的好方法......)

【问题讨论】:

  • 你为什么要使用socket.io-stream?使用普通的 socket.io,您可以随时直接发送包含单个变量的消息。要发送单个值(或一组值),只需发送一条消息,其中变量是数据。我看不出有什么理由在这里使用流? socket.io 的整体简单性在于您可以随时发送带有数据的消息。这就是您需要做的所有事情。
  • 如果我在更新循环中每秒至少 15 次在浏览器中调用 emit() 事件,它是否足够强大以获得接近实时的性能? (老实说,我不知道这个问题的答案,这就是我决定直播的原因)
  • 15 次/秒取决于您的基础架构,包括服务器和客户端以及它们之间的网络。但是 socket.io 流不会比仅仅发送一个简单的 socket.io 消息更好,因为两者都是建立在 webSocket 数据包之上的。事实上,socket.io-stream 可能还有另一层。所以从简单的 socket.io 消息开始,看看它对你的效果如何,使用普通的 socket.io 消息发送你的单个浮点数是微不足道的。
  • 啊,这似乎工作得很好,我可能一直在考虑问题的复杂性,并没有完全理解 socket.io/-stream 基础设施。谢谢! :)

标签: javascript node.js sockets socket.io stream


【解决方案1】:

我建议您只使用普通的 socket.io 消息。这将使发送变量变得容易。您可以直接将其作为数据发送,也可以将其包装在一个对象中并使其成为该对象的属性并发送该对象。如果您想发送多条数据,则作为对象发送使其更具可扩展性。

socket.io-stream 是 socket.io 之上的一个层,它是 webSocket 传输之上的一个层,因此流不会比普通的 socket.io 消息更有效,并且流实际上可能会产生额外的开销(效率较低)。此外,流不提供用于发送结构化数据的内置机制。像任何流一样,您必须向流中添加数据格式,以便能够解释流中发送的数据。而普通的 socket.io 消息已经为你做到了。

所以,我建议您从简单的 socket.io 消息开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 2020-07-10
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多