node.js HTTP服务器,请求和响应超时之间的区别

说到超时HTTP请求,它看起来像node.js有三个单独的超时:

  1. server.setTimeout http://nodejs.org/api/http.html#http_server_settimeout_msecs_callback
  2. request.setTimeout http://nodejs.org/api/http.html#http_request_settimeout_timeout_callback
  3. response.setTimeout http://nodejs.org/api/http.html#http_response_settimeout_msecs_callback

任何人都可以澄清这些方法之间的差异,为什么有人会想要使用每一个?

  1. 你正在你的node.js应用程序中运行一个web服务器。 这决定了节点在由于空闲超时而closures客户端请求连接之前,没有stream量打开的时间。 一个例子是用户在从你的应用程序下载一个大文件的时候在家中失去能量。 您设置一次,它将适用于您的服务器收到的所有客户端连接。
  2. 这用于从节点程序到远程Web服务器的传出请求。 所以你写一个刮板来下载文件,你的互联网连接在下载的时候死掉。 这决定了节点何时最终放弃等待来自远端的数据。 这只会影响一个特定的请求,因为底层的TCP连接将被closures,并且每个传出的请求将得到一个不同的TCP连接。
  3. 由于HTTP请求和相应的响应通过相同的底层TCP套接字发生,我的理解是req.setTimeoutres.setTimeout最终导致相同的底层系统调用,它使用相应的libuv / os调用来设置TCP套接字本身的超时。 所以我认为两者都是相同的,你可以select哪一个更方便,或者哪一个对你来说语义上更清楚。 我可能是错误的,虽然如此,如果有其他人知道肯定有自由纠正我。

一般来说,违约是合理的。 然而,如果你知道你有很多客户的连接速度很慢或有些连接(你在偏远地区或卫星等地方提供手机服务),那么你可能需要设置更长的时间,而且实际上我们正在closures的连接因为时间到。 如果您知道您的客户端连接良好(如同一个数据中心内的服务器),那么您可能希望将其设置得更短,并且您希望更积极地释放资源。