node.js TCP回复时间不一致
我想测量从web服务器到达响应所需的时间。我知道,对于node,我无法获得准确的测量值,但我对一致的测量值非常感兴趣,因此我可以检测到我过去与主机提供商的高滞后峰值 这是我为此编写的简化代码(忽略那些日志调用): 但是,这段代码有一个奇怪的行为。当我运行它时,node.js TCP回复时间不一致,node.js,sockets,tcp,Node.js,Sockets,Tcp,我想测量从web服务器到达响应所需的时间。我知道,对于node,我无法获得准确的测量值,但我对一致的测量值非常感兴趣,因此我可以检测到我过去与主机提供商的高滞后峰值 这是我为此编写的简化代码(忽略那些日志调用): 但是,这段代码有一个奇怪的行为。当我运行它时,socket.write()和data事件之间的时间出乎意料地高,大约比实时时间多140ms。 但是,这是我不理解的,如果我在套接字关闭后再次使用相同的选项调用socket.connect(),或者如果我在5-15秒内重新运行脚本,我会得到
socket.write()
和data
事件之间的时间出乎意料地高,大约比实时时间多140ms。但是,这是我不理解的,如果我在套接字关闭后再次使用相同的选项调用
socket.connect()
,或者如果我在5-15秒内重新运行脚本,我会得到正确的度量值。以下是一个输出示例:
~/node $ node test.js
23-3-2015 22:09:19 > DNS time: 12 ms.
23-3-2015 22:09:19 > Connection time: 23 ms.
23-3-2015 22:09:19 > Connected to 91.142.222.187
23-3-2015 22:09:19 > Socket writing time: 6 ms.
23-3-2015 22:09:20 > Request time: 167 ms
23-3-2015 22:09:20 > Received FIN
23-3-2015 22:09:20 > Socket closed
~/node $ node test.js
23-3-2015 22:09:24 > DNS time: 12 ms.
23-3-2015 22:09:25 > Connection time: 23 ms.
23-3-2015 22:09:25 > Connected to 91.142.222.187
23-3-2015 22:09:25 > Socket writing time: 6 ms.
23-3-2015 22:09:25 > Request time: 23 ms
23-3-2015 22:09:25 > Received FIN
23-3-2015 22:09:25 > Socket closed
这发生在运行Debian的服务器以及运行Windows 8.1的计算机上
我当然可以每次运行两次测试,然后取第二个值,但这似乎有点浪费时间,我想知道引擎盖下发生了什么,以及如何让它一次正常工作
谢谢。
你应该只考虑少于250MS左右的时间,因为这是在TCP定时器的时间间隔内,例如延迟ACK。但是如果我记得正确的话,在这个特殊的情况下,唯一可以延迟的是FIN数据包,因为我收到了数据回复。assetNoDelay
为true
。
~/node $ node test.js
23-3-2015 22:09:19 > DNS time: 12 ms.
23-3-2015 22:09:19 > Connection time: 23 ms.
23-3-2015 22:09:19 > Connected to 91.142.222.187
23-3-2015 22:09:19 > Socket writing time: 6 ms.
23-3-2015 22:09:20 > Request time: 167 ms
23-3-2015 22:09:20 > Received FIN
23-3-2015 22:09:20 > Socket closed
~/node $ node test.js
23-3-2015 22:09:24 > DNS time: 12 ms.
23-3-2015 22:09:25 > Connection time: 23 ms.
23-3-2015 22:09:25 > Connected to 91.142.222.187
23-3-2015 22:09:25 > Socket writing time: 6 ms.
23-3-2015 22:09:25 > Request time: 23 ms
23-3-2015 22:09:25 > Received FIN
23-3-2015 22:09:25 > Socket closed