Node.js 从流中读取大量数据:是否有类似“;stream.hasbytestavailable“;

Node.js 从流中读取大量数据:是否有类似“;stream.hasbytestavailable“;,node.js,networking,socket.io,Node.js,Networking,Socket.io,我需要从流中读取大量数据。数据的长度在发送之前是未知的。流中没有特殊的“结束字符”。 问题:我得到流的多个数据事件,我不知道何时开始处理数据 我从其他编程语言中了解到一种模式,在这种模式下,我可以发现TCP流中是否还有数据(例如,iOS和objective-C,其中对于NSInputStream对象有类似“hasBytesAvailable”的内容) node.js中是否存在类似的内容?或者如何解决node.js的问题?您提到的方法并没有按照您所说的做。它们只告诉您可以在不阻塞的情况下读取多少数

我需要从流中读取大量数据。数据的长度在发送之前是未知的。流中没有特殊的“结束字符”。 问题:我得到流的多个数据事件,我不知道何时开始处理数据

我从其他编程语言中了解到一种模式,在这种模式下,我可以发现TCP流中是否还有数据(例如,iOS和objective-C,其中对于NSInputStream对象有类似“hasBytesAvailable”的内容)


node.js中是否存在类似的内容?或者如何解决node.js的问题?

您提到的方法并没有按照您所说的做。它们只告诉您可以在不阻塞的情况下读取多少数据。一点也不一样

读取到流末尾的唯一方法是读取到流的末尾。当它完成时,您将得到一个EOS


当数据流来自网络流时,实际上并没有这样的事情:考虑到对等体可以永远写数据。

不知道数据的长度,没有EOF字符,而持有开放的套接字,就必须利用数据的结构属性,也就是说,动态解析它。当然,假设数据具有已知的结构特性(例如,定义的视频格式);如果不是,要么你的问题根本无法解决,要么你有一个“XY问题”(你过早地定义了一个解决方案,而没有完全定义真正的问题)。

到目前为止,我的理解是:当客户端关闭套接字时,我会得到一个EOS,对吗?在我的情况下,客户端只是等待,并不关闭套接字。那么-该怎么办呢?@peace97在这种情况下,您需要一个应用程序协议:一个长度字前缀、一个自描述协议(如XML或对象序列化)、一个带有内部STX转义和转义的STX/ETX系统,等等。