我正在使用net.connect(host, port)
在Node.js中创建一个套接字,向其中写入一些数据,然后在套接字上侦听结果。
TCP协议内置了订购信息;数据包可以发送或乱序发送,然后由客户端使用数据包元数据中内置的信息进行重新排列。
Node.js触发一系列.on("data")
事件,以使您知道套接字上已接收到数据。这些事件以某种顺序触发-只有一个执行线程,因此无法同时处理它们。
触发数据事件的顺序是否保证为TCP数据包顺序?对于在套接字上接收到的数据,.on("data")
事件是否有可能引发混乱?
答案 0 :(得分:1)
TCP数据由操作系统按顺序传送或完全不传送到TCP套接字。 AFAIK NodeJS基本上在打开的套接字上执行epoll()
(通过libuv),并在到达时读取数据。然后,它将data
事件排入队列,该事件将按顺序传递给我们的事件处理程序。
因此,我认为无法data
事件的形式对套接字进行乱序处理。如果可能的话,将很难在NodeJS中可靠地处理TCP流量。