阅读Node文档关于server.keepAliveTimeout:
如果服务器在keep-alive超时触发之前收到新数据,则会重置常规不活动超时,即server.timeout。
这与server.timeout有何区别?
听起来它们都是关于套接字超时的,在不活动时才开始计时。
阅读Node文档关于server.keepAliveTimeout:
如果服务器在keep-alive超时触发之前收到新数据,则会重置常规不活动超时,即server.timeout。
这与server.timeout有何区别?
听起来它们都是关于套接字超时的,在不活动时才开始计时。
Keep-Alive
是Http协议的头部之一。 Keep-Alive
头部将允许多个Http请求通过单个连接发送,而不是使用多个连接。
因此,设置keepAliveTimeout
将决定这些Keep-Alive
连接允许保持打开的时间长度。 timeout
决定服务器将等待客户端请求的最长时间。
关于Keep-Alive
的更多信息,请参见https://blog.stackpath.com/glossary-keep-alive/。
server.timeout
是指请求被接收后允许的不活动时间(以毫秒为单位)(无需始终设置,默认值为5分钟)。
server.keepAliveTimeout
是服务器在最后一次响应后等待并保持连接打开的时间(以毫秒为单位)(无需始终设置,默认值为5秒)。
keepAliveTimeout
是指在销毁套接字之前的时间,而 timeout
是需要确定套接字是否已超时的时间。 keepAliveTimeout
将销毁套接字,timeout
只是“决定”它已断开连接。并且提到“如果服务器在保持活动状态的超时时间触发之前收到新数据,则会重置常规不活动超时时间”,这很明显,因为如果从此套接字接收到新数据,就意味着它仍然存活,timeout
应该被重置。server.setTimeout
方法下,文档提到,“默认情况下,服务器的超时值为2分钟,如果套接字超时,则会自动销毁”。 - Maxime Dupré从nodejs的角度来看
server.timeout
超时时间,单位为毫秒。默认值:120000(2分钟)。 在一个套接字被认为已经超时之前的不活动毫秒数。
当值为0时,会禁用传入连接的超时行为。
套接字超时逻辑在连接时设置,因此更改此值仅会影响到服务器上的新连接,而不会影响任何现有连接。
要更改默认超时时间,请使用--http-server-default-timeout
标志。
server.keepAliveTimeout
超时时间,单位为毫秒。默认值:5000(5秒)。 服务器需要等待额外传入数据的不活动毫秒数,即在它完成最后一次响应后,直到套接字被销毁之前。如果服务器在保持活动超时触发之前收到新数据,那么它将重置常规不活动超时,即 server.timeout。
当值为0时,会禁用传入连接的保持活动超时行为。值为0将使http服务器的行为类似于Node.js 8.0.0之前的版本,这些版本没有保持活动超时。
套接字超时逻辑在连接时设置,因此更改此值仅会影响到服务器上的新连接,而不会影响任何现有连接。
换句话说:
server.timeout 可以告知客户端服务器愿意保持连接的时间。 server.keepAliveTimeout在保持活动超时触发之前收到数据会重置 server.timeout
我后来意识到@Software Person也用另一种方式表达了同样的内容,对吧!
文档
服务器在完成最后一个响应的写入后,需要等待多少毫秒的不活动时间,才会销毁套接字之前,等待其他传入数据。
解释
由于套接字被重用,它们会保持活动状态以处理另一个请求。它将从完成上一个请求的响应的最后一位的时间开始计时,如果在超时期间没有其他请求进来,则套接字将被销毁。
文档
在套接字被认为已超时之前的不活动毫秒数。默认情况下,服务器的超时值为2分钟,如果套接字超时,则会自动销毁。但是,如果将回调分配给服务器的“超时”事件,则必须显式处理超时。
解释
如果套接字在此期间未发送或接收信息,则套接字将被销毁。与 server.keepAliveTimeout
的区别在于,此超时不等待上一个请求完成才开始计时。如果没有发送或接收任何内容,则可以在请求期间超时。
我不理解的地方
这里的“不活动”是什么意思?如果套接字接收到数据,它是否处于不活动状态?还是只有在写入数据时套接字才处于活动状态?