Websocket:是否同步发送服务器数据?

我正在使用nodejs + websocket模块通过websocket在客户端和服务器之间build立连接。 服务器向客户端发送多次数据:我知道这是一个TCP连接,但让我删除每一个疑问。 “排放”顺序吗? 如果第一个“发射”在1s完成,第二个在时间2s“发射”,那么客户肯定会收到第一个发射,然后是第二个发射? 如果第一个发射还没有收到,而第二个发射又发出,会发生什么? 发出阻塞呼叫?

WebSocketsbuild立在TCP上。 TCP保证数据包的传送和sorting。 另外,与TCP不同,WebSocket是基于消息的,这意味着WebSocket消息作为一个完整的消息被接收(TCP正在stream式传输,“消息”可能从监听者的angular度来看是碎片化的)

在node.js中,两个从相同的上下文(相同的函数)发出,一个接一个地按照这个顺序传递。 然而,如果你的发射是在两个不同的callback,你不能总是保证什么时候Node.js将安排这些callback,所以发射可能得到重新sorting,因为排定的callback被重新sorting。

更新:

下面是一个例子来展示为什么Node.js的事件驱动性质可能导致令人惊讶的WebSocket发送/发送的重新sorting:

fs.readFile(file1,function(e,data) { ws.send(data); }); fs.readFile(file2,function(e,data) { ws.send(data); }); 

文件1和文件2传送到浏览器的顺序是不可预知的(即使文件大小不能保证什么时候会由于caching,文件系统碎片等原因而被触发)。 即使使用setTimeout 1秒后调用file2的readFile,浏览器仍然可能不按顺序接收它们(例如,如果file1更大并且需要3s读取,则file1的发送将在发送file2之后发生) 。

所以是的,发送/发送将在浏览器中按照他们在Node.js中调用的顺序接收,但是由于Node.js的asynchronous事件驱动性质,发送/发送可能不会按照您期望的顺序发生。

Node.js的asynchronous事件驱动的性质是Node.js出色的效率和性能,但是如果你不习惯这种基于callback的编程,它可能会有一些令人惊讶的结果。

消息以正确的顺序进入客户端。