nodejs套接字写入顺序

在编写nodejs代理服务器时,我发现在数据写入另一个socket端之前,数据可能会进入我的代理。 每次我的数据进来,我打电话给socket.write(); …

不过,由于发送的asynchronous性质,我不能确定传输的数据的顺序是否由nodejs保证与我调度写入的顺序相同。

有没有人知道在这种情况下nodejs的行为?

如果订单不能保证,那么我将不得不缓冲数据,直到我收到数据成功发送callback。

Node.js是单线程的,一次只能做一件事。 它有一个按顺序处理的callback队列。 更多的信息可以在这里find: http : //howtonode.org/understanding-process-next-tick 。

只要您在接收数据时调用socket.write,它就会按顺序到达。 如果你仔细想想,如果没有这样做,那么节点就不能用作networking服务器。 例如,一个简单的节点快速站点可能会使用fs.readfileasynchronous读取文件,并使用socket.write将其提供给浏览器。 如果订单不能保证,该文件可能无法正确返回。

从节点0.8.14文档: http ://nodemanual.org/latest/nodejs_ref_guide/net.html#net.Socket.write

如果整个数据已成功刷新到内核缓冲区,则返回true。 如果全部或部分数据在用户存储器中排队,则返回false。 当缓冲区再次空闲时,会发出“漏极”。

net.Socket具有socket.write()总是起作用的属性。 这是为了帮助用户快速启动和运行。 计算机不能总是跟上写入套接字的数据量 – networking连接可能太慢了。 Node.js将在内部排队写入套接字的数据,并在任何可能的时候通过线路发送出去。 (在内部,它在套接字的文件描述符上轮询可写。)