nodejs套接字写入顺序

And*_*ers 4 sockets node.js

在编写nodejs代理服务器时,我注意到在将数据写入另一个套接字端之前,数据可能会多次进入我的代理.每次我的数据进入时,我都会调用socket.write(); ...

但是,我不确定由于发送的异步性质,nodejs保证传输的数据的顺序是否与我调度写入的顺序相同.

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

如果订单无法保证,那么我将不得不缓冲数据,直到我收到数据成功发送回调.

And*_*dyD 5

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

只要您在接收数据时调用socket.write,它就会按顺序到达.如果您考虑一下,如果它没有这样做,那么节点就不能用作网络服务器.例如,一个简单的节点表达站点可能使用fs.readfile异步读取光盘中的文件,并使用socket.write将其提供给浏览器.如果订单无法保证,则可能无法正确返回该文件.

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

如果将整个数据成功刷新到内核缓冲区,则返回true.如果全部或部分数据在用户内存中排队,则返回false.当缓冲区再次释放时,会发出'drain'.

net.Socket具有socket.write()始终有效的属性.这是为了帮助用户快速启动和运行.计算机无法始终跟上写入套接字的数据量 - 网络连接可能太慢.Node.js将在内部对写入套接字的数据进行排队,并在可能的情况下通过线路将其发送出去.(在内部,它在套接字的文件描述符上轮询是否可写.)