Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Node.js将单个浮点变量从客户端流到后端?_Javascript_Node.js_Sockets_Socket.io_Stream - Fatal编程技术网

Javascript 如何使用Node.js将单个浮点变量从客户端流到后端?

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

我在浏览器中以每秒15帧的速度捕获数据,并希望将数据流传输到我的服务器。现在这只是一个浮点变量(
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)
  });
});

服务器端的My
console.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基础结构。谢谢!:)