keepAliveTimeout和超时之间的区别?

时间:2019-06-15 00:02:07

标签: node.js

阅读有关server.keepAliveTimeout的Node的文档:

  

如果服务器在触发保持活动超时之前收到新数据,它将重置常规的不活动超时,即server.timeout。

server.timeout有什么不同?

听起来它们都与套接字超时有关,套接字超时只会在不活动时开始计时。

6 个答案:

答案 0 :(得分:8)

Keep-Alive是Http协议的标头部分。 Keep-Alive标头将允许通过单个连接发送多个Http请求,而不是使用多个。

因此,设置keepAliveTimeout将决定允许这些Keep-Alive连接保持打开状态的时间。 timeout决定服务器等待客户端响应的最长时间。

有关Keep-Alive的更多信息,可以在这里找到:https://blog.stackpath.com/glossary-keep-alive/

答案 1 :(得分:3)

从nodejs的角度来看

server.timeout

超时(以毫秒为单位)。默认值:120000(2分钟)。 假定套接字超时之前的闲置毫秒数。

值为0将禁用传入连接的超时行为。

套接字超时逻辑是在连接上设置的,因此更改此值只会影响到服务器的新连接,而不会影响任何现有连接。

要更改默认超时,请使用--http-server-default-timeout标志。

server.keepAliveTimeout

超时(以毫秒为单位)。默认值:5000(5秒)。 完成写入最后一个响应之后,在销毁套接字之前,服务器需要等待不活动的毫秒数,以等待其他传入数据。如果服务器在触发保持活动超时之前收到新数据,请it will reset the regular inactivity timeout即server.timeout

值为0将禁用传入连接上的保持活动超时行为。值为0会使http服务器的行为类似于8.0.0之前的Node.js版本,后者没有保持活动的超时时间。

套接字超时逻辑是在连接上设置的,因此更改此值只会影响到服务器的新连接,而不会影响任何现有连接。

换句话说:

server.timeout可以通知客户端服务器愿意保持连接多长时间 server.keepAliveTimeout在触发保持活动超时之前接收到数据的server.timeout重置

后来我意识到@Software Person也以另一种方式告诉了同样的事情,对吧!

答案 2 :(得分:2)

(pd.crosstab(df['hour'], df['product']) .reindex(pd.RangeIndex(df['hour'].min(), df['hour'].max()+1), fill_value=0)) product desktop laptopt printer 14 0 1 0 15 0 0 1 16 0 0 0 17 1 1 0 是销毁套接字之前的时间,而keepAliveTimeout是假定套接字已超时所需的时间。 timeout破坏了套接字,keepAliveTimeout仅“决定”它已断开连接。并且提到“如果服务器在触发保持活动超时之前接收到新数据,它将重置常规的不活动超时”,这很明显,就好像它从此套接字接收到新数据一样,这意味着它仍然有效,并且{ {1}}应该重置

答案 3 :(得分:2)

在请求完成或服务器未发送响应(即保持空闲/无效)之后,每个连接都会终止。

(例如,对于传入请求,服务器没有发回响应,在这种情况下,连接将保持打开状态,直到指定的超时时间为止)。

由于每个连接均在请求得到响应后终止,因此创建多个连接可以减少加载时间。这通过启用Keep-Alive来完成,从而避免了重复打开和关闭新连接的需要。

  

现在,保持活动超时使连接仅在以下时间保持打开状态:   在两个连续请求之间指定的时间。

(例如,如果keepalive-timeout为10毫秒,并且两个连续的请求花费超过10毫秒,则连接将关闭。此外,如果每个请求的超时为15毫秒,则它将等待第一个请求完成直到15秒,如果花费的时间超过该时间,就会发生超时。)

答案 4 :(得分:2)

server.timeout是收到请求后允许的不活动时间(以毫秒为单位)(不必始终设置,默认为2分钟)

server.keepAliveTimeout是最后一次响应后服务器将等待并保持连接打开的时间(以毫秒为单位)。 (不必总是设置,默认为5秒)

答案 5 :(得分:0)

我开始了赏金计划,但这是我的赏金计划。有人请告诉我这是否正确。

server.keepAliveTimeout

文档

  

服务器在完成最后一个响应的写入之后,在销毁套接字之前,它需要等待不活动的毫秒数,以等待其他传入数据。

说明

由于套接字已被重用,因此它们可以保持活动状态以用于其他请求。从完成写入最后一个请求的响应的最后一位起,它将启动计时器,如果在超时时间内没有其他请求进入,则套接字将被破坏。

server.timeout

文档

  

假定套接字超时之前的闲置毫秒数。默认情况下,服务器的超时值为2分钟,如果套接字超时,套接字将自动销毁。但是,如果将回调分配给服务器的“超时”事件,则必须明确处理超时。

说明

如果套接字在此期间未发送或接收信息,则套接字将被销毁。与server.keepAliveTimeout的区别在于此超时不等待上一个请求完成才开始超时。如果没有发送或接收任何消息,它可能会在请求期间超时。

我不了解的

这里的“不活动”是什么意思?如果套接字接收到数据,它是否处于非活动状态?还是仅在写入数据时套接字才活动?