node.js HTTP Server,Request和Response Timeouts之间的区别

时间:2014-10-21 18:23:47

标签: javascript node.js

当谈到超时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
  4. 任何人都可以澄清每种方法之间的差异以及为什么有人想要使用每种方法吗?

1 个答案:

答案 0 :(得分:13)

  1. 您正在node.js应用中运行Web服务器。这将确定节点在关闭之前将客户端请求连接打开而没有流量的时间长度,因为空闲超时。一个例子是用户在从您的应用程序下载大文件时失去了他们家中的电量。您只需设置一次,它将应用于服务器接收的所有客户端连接。
  2. 这适用于从节点程序到远程Web服务器的传出请求。因此,您编写了一个刮刀来下载文件,并且您的Internet连接在下载时会死亡。这确定了节点何时最终放弃等待来自远程端的数据。这只会影响特定请求,因为底层TCP连接将被关闭,每个传出请求将获得不同的TCP连接。
  3. 由于HTTP请求和相应的响应是通过相同的底层TCP套接字发生的,我的理解是req.setTimeoutres.setTimeout最终导致相同的底层系统调用,它使用TCP套接字本身设置超时相应的libuv / os调用。所以我认为两者都是等价的,你可以选择哪一个更方便,或者哪一个让你觉得语义更清晰。我可能错了,尽管如此,如果有其他人知道肯定会随意纠正我。
  4. 通常默认值是合理的。但是,如果您知道很多客户端的连接速度非常慢或很复杂(您在偏远地区或卫星或其他任何地方提供移动电话),并且实际上仍然可行的连接,我们可能需要设置更长时间超时。如果您知道客户端连接良好(如同一数据中心中的服务器),并且您希望更积极地释放资源,则可能需要将它们设置得更短。