保持活力并请求超时

时间:2015-12-16 20:07:31

标签: c# asp.net tcp keep-alive

我理解keep-alive message的目的是阻止底层TCP连接关闭,以便可以通过同一TCP连接发送多个请求。

然而,目前还不清楚这会如何影响已超时的请求:

  • 如果通过同一个TCP连接处理多个请求,当客户端超时时,ASP.NET将如何知道?我不确定如何正确地提出这个问题,但我怀疑如果基础TCP连接关闭,HttpWorkerRequest.IsClientConnected是假的?我如何确定客户是否已超时?肯定无法再发送回复了吗?
  • 由于客户端可以发送keep-alive条消息,对请求有什么影响?我希望它没有任何效果,超时等机制将照常工作。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:3)

HTTP keep-alive(不应与TCP保持活动混淆)要求服务器在HTTP响应完全发送后不关闭连接。因此,HTTP保持活动仅与发送HTTP响应之后和接收下一个HTTP请求之前的时间相关。

  

......当客户端超时时,ASP.NET将如何知道?

服务器正在尝试读取数据。如果客户端关闭连接,服务器将收到通知(如通过读取0字节)并将关闭连接。

  

......肯定无法再发送回复了吗?

重复一遍,HTTP keep-alive仅在发送完整响应后才有意义。所以这个问题与HTTP keep-alive无关。

  

由于客户端可以发送保持活动消息,因此对请求有什么影响?

对当前请求没有影响。但是客户端必须意识到服务器可能会在发送HTTP响应之后以及服务器获取新请求之前随时关闭连接。因此,当客户端尝试发送新请求时,服务器可能会完全关闭连接。在这种情况下,客户端必须在新连接中重试幂等请求(GET),而其他请求应该失败。