我正在使用nodejs + websocket模块通过websocket在客户端和服务器之间建立连接.服务器向客户端发送了几次数据:我知道这是一个TCP连接,但让我删除对它的每一个疑问."发出"顺序吗?如果第一次"发射"在时间1s完成,第二次"发射"在时间2s完成,那么客户端肯定会收到第一次发射然后接收第二次发射吗?如果尚未收到第一个发射而第二个发射,会发生什么?是否会发出阻止通话?
kan*_*aka 22
WebSockets基于TCP构建.TCP保证数据包的传送和排序.此外,与TCP不同,WebSockets是基于消息的,这意味着WebSocket消息作为整个消息被接收(TCP是流式传输,而'消息'可能从侦听器的角度来看是碎片化的)
在node.js中,一个接一个地从同一个上下文(相同的函数)调用的两个发出按顺序传递.但是,如果你的发射是在两个不同的回调中,你不能总是保证Node.js何时会安排那些回调,因此可能会重新排序发射,因为计划的回调被重新排序.
更新:
下面是一个示例,扩展了为什么Node.js的事件驱动特性可能导致WebSocket发送/发送的令人惊讶的重新排序:
fs.readFile(file1,function(e,data) { ws.send(data); });
fs.readFile(file2,function(e,data) { ws.send(data); });
Run Code Online (Sandbox Code Playgroud)
file1和file2将被传递到浏览器的顺序是不可预测的(即使文件大小也不能保证它们何时会因缓存,文件系统碎片等问题而触发).即使稍后使用setTimeout调用file2的readFile,浏览器仍可能无序接收它们(例如,如果file1更大并且需要3s才能读入,那么file1的发送将在send2发送之后发生) .
所以是的,发送/发送将按照它们在Node.js中调用的顺序在浏览器中接收,但由于Node.js的异步事件驱动特性,发出/发送可能不会按照您期望的顺序发生.
Node.js的异步事件驱动特性使Node.js具有出色的效率和性能,但如果您不习惯这种类型的基于回调的编程,它可能会产生一些令人惊讶的结果.
| 归档时间: |
|
| 查看次数: |
6193 次 |
| 最近记录: |