Javascript 如何使用Node.js将单个浮点变量从客户端流到后端?
我在浏览器中以每秒15帧的速度捕获数据,并希望将数据流传输到我的服务器。现在这只是一个浮点变量(Javascript 如何使用Node.js将单个浮点变量从客户端流到后端?,javascript,node.js,sockets,socket.io,stream,Javascript,Node.js,Sockets,Socket.io,Stream,我在浏览器中以每秒15帧的速度捕获数据,并希望将数据流传输到我的服务器。现在这只是一个浮点变量(distance)。我正在使用socket.io-stream和socket.io在服务器和客户端之间进行通信。基本io.emit()和io.on()事件正在工作,但我一辈子都不知道如何流式处理单个变量——我甚至尝试将单个浮点值转换为Blob(),以及ArrayBuffer,但我看不到服务器上的数据更新 这是我的前端代码: var distance = new Blob([0]) // init di
distance
)。我正在使用socket.io-stream和socket.io在服务器和客户端之间进行通信。基本io.emit()和io.on()事件正在工作,但我一辈子都不知道如何流式处理单个变量——我甚至尝试将单个浮点值转换为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)
});
});
服务器端的Myconsole.log()
只打印完整的流对象,数据就是“distconsereamdata”:{}
所有联机示例都使用
fs
和流文件数据或二进制数据,但我只想流式处理在浏览器中计算的单个浮点变量。另外,请让我知道是否有更简单的方法来实现这一点(或者即使我使用socket.io-stream查找错误的树。我最初想在浏览器中每秒调用io.emit()15次,但觉得这可能不是一个很好的方法,哈哈…)我建议您只使用一条简单的socket.io消息。这将使发送变量变得容易。您可以直接将其作为数据发送,也可以将其包装在对象中,使其成为该对象的属性并发送该对象。如果要发送多个数据段,则作为对象发送会使其更具可扩展性
socket.io-stream是位于socket.io之上的一层,socket.io是位于webSocket传输之上的一层,因此流不会比普通socket.io消息更高效,并且流实际上可能会产生额外的开销(效率更低)。此外,流不提供用于发送结构化数据的内置机制。与任何流一样,您必须向流添加数据格式,以便能够解释流中发送的数据。而普通socket.io消息已经为您完成了这一任务
因此,我建议您从简单的socket.io消息开始。为什么要使用socket.io-stream?使用plain socket.io,您可以随时直接发送包含单个变量的消息。要发送单个值(或一组值),只需发送一条消息,其中变量是数据。我看不出有任何理由在这里使用流?io的全部简单之处在于,您可以随时发送包含数据的消息。听起来你只需要这么做。如果我在更新循环中每秒至少调用浏览器中的emit()事件15次,那么它是否足够健壮以获得接近实时的性能?(老实说,我不知道这个问题的答案,这就是为什么我决定使用流)15次/秒取决于您的基础设施,包括服务器和客户端以及它们之间的网络。但是socket.io流不会比发送一个简单的socket.io消息更好,因为两者都是在webSocket数据包之上构建的。事实上,socket.io-stream可能还有另一层。因此,从plain socket.io消息开始,看看它对您的效果如何,使用plain socket.io消息发送单个浮点值是很简单的。啊,这似乎很有效,我可能过度考虑了问题的复杂性,而没有完全理解socket.io//stream基础结构。谢谢!:)