在http/https的文档中, timeout是这样描述的:
timeout <number>: A number specifying the socket timeout in milliseconds. This will set the timeout before the socket is connected.
但是假如我想要设置如下两个timeout的话,需要怎么配置呢?
CONNECTION_TIMEOUT:连接超时
SO_TIMEOUT:socket operation超时,socket已经连接上了,但是没有接收到数据的超时时间
我注意到http可以配置createConnection选项,node的net模块有setTimeout方法, 请问各位大神,http模块的request方法的timeout是不是就是CONNECTION_TIMEOUT? net模块的setTimeout方法的timeout是不是就是SO_TIMEOUT?
如果没记错的话,应该是下面这样
问题一:net模块的setTimeout方法的timeout是不是就是SO_TIMEOUT? 答:socket连接上,以下两种情况都会触发timeout: 1、超过 timeout 时长,从来没有收到数据,触发timeout。 2、已经收到数据,但是收到数据后,timeout 时长后,没有收到数据,触发timeout。
问题二:http模块的request方法的timeout是不是就是CONNECTION_TIMEOUT? 答:其实就是net模块的timeout,只不过封装了一层而已。
@zhaochy1990 目前node.js(9.11.1)并没有提供设置connection timeout的配置,需要自己人肉 setTimeout() 来判断连接超时。(如有请告知我)
可以测试如下的场景。在server所在的主机,将 ack 包丢弃,client 会一直重新发包,直到超时触发 error 事件
(这个超时时间跟 net.connect(xx).setTimeout(time) 里的time没有关系)
client -------> SYN -------> server client <------- ACK <—x--- server