Node net.Socket.on(“ data”)事件是否有保证的顺序?

时间:2019-04-04 04:51:59

标签: node.js sockets networking tcp

我正在使用net.connect(host, port)在Node.js中创建一个套接字,向其中写入一些数据,然后在套接字上侦听结果。

TCP协议内置了订购信息;数据包可以发送或乱序发送,然后由客户端使用数据包元数据中内置的信息进行重新排列。

Node.js触发一系列.on("data")事件,以使您知道套接字上已接收到数据。这些事件以某种顺序触发-只有一个执行线程,因此无法同时处理它们。

触发数据事件的顺序是否保证为TCP数据包顺序?对于在套接字上接收到的数据,.on("data")事件是否有可能引发混乱?

1 个答案:

答案 0 :(得分:1)

TCP数据由操作系统按顺序传送或完全不传送到TCP套接字。 AFAIK NodeJS基本上在打开的套接字上执行epoll()(通过libuv),并在到达时读取数据。然后,它将data事件排入队列,该事件将按顺序传递给我们的事件处理程序。

因此,我认为无法data事件的形式对套接字进行乱序处理。如果可能的话,将很难在NodeJS中可靠地处理TCP流量。