C# 保持活动状态并请求超时

C# 保持活动状态并请求超时,c#,asp.net,tcp,keep-alive,C#,Asp.net,Tcp,Keep Alive,我理解,协议的目的是防止底层TCP连接关闭,以便可以通过同一TCP连接发送多个请求 但是,尚不清楚这如何影响已超时的请求: 如果在同一TCP连接上处理多个请求,当客户端超时时,ASP.NET如何知道?我不知道如何正确地问这个问题,但我怀疑如果底层TCP连接关闭,这是错误的?如何确定客户端是否已超时?肯定不能再发送响应了吗 由于客户端可以发送保持活动状态消息,因此它对请求有什么影响(如果有的话)?我希望它不会有任何效果,超时等机制将照常工作 感谢您的时间和帮助。HTTP保持活动(不应与TCP保

我理解,协议的目的是防止底层TCP连接关闭,以便可以通过同一TCP连接发送多个请求

但是,尚不清楚这如何影响已超时的请求:

  • 如果在同一TCP连接上处理多个请求,当客户端超时时,ASP.NET如何知道?我不知道如何正确地问这个问题,但我怀疑如果底层TCP连接关闭,这是错误的?如何确定客户端是否已超时?肯定不能再发送响应了吗
  • 由于客户端可以发送
    保持活动状态
    消息,因此它对请求有什么影响(如果有的话)?我希望它不会有任何效果,超时等机制将照常工作
感谢您的时间和帮助。

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

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

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

。。。肯定不能再发送响应了吗

我再说一遍,HTTP keep alive仅在发送完整响应后才相关。所以这个问题与HTTP保持活动无关

既然客户端可以发送保持活动状态的消息,那么它对请求有什么影响(如果有的话)

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

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

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

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

。。。肯定不能再发送响应了吗

我再说一遍,HTTP keep alive仅在发送完整响应后才相关。所以这个问题与HTTP保持活动无关

既然客户端可以发送保持活动状态的消息,那么它对请求有什么影响(如果有的话)


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

谢谢你解释Steffen。根据您的回复,
keep-alive
位于请求HTTP头中是有意义的。为什么客户端需要发送额外的HTTP
keep-alive
数据包?我真的把它们和TCP级别的保持活动包混为一谈了吗?@Pooven:是的,你把HTTP和TCP保持活动包混为一谈了。HTTP keep alive仅在HTTP头中发送,它是客户端向服务器发出的请求,请求在响应完成后不要关闭连接。TCP keep alive用于确保空闲连接(即无数据流)不会因为防火墙等超时而关闭,并且端点将检测到由于路由器断开、服务器关闭等导致的连接丢失。TCP keep alive可用于任何类型的TCP连接,不仅仅是HTTP。谢谢你解释Steffen。根据您的回复,
keep-alive
位于请求HTTP头中是有意义的。为什么客户端需要发送额外的HTTP
keep-alive
数据包?我真的把它们和TCP级别的保持活动包混为一谈了吗?@Pooven:是的,你把HTTP和TCP保持活动包混为一谈了。HTTP keep alive仅在HTTP头中发送,它是客户端向服务器发出的请求,请求在响应完成后不要关闭连接。TCP keep alive用于确保空闲连接(即无数据流)不会因为防火墙等超时而关闭,并且端点将检测到由于路由器断开、服务器关闭等导致的连接丢失。TCP keep alive可用于任何类型的TCP连接,而不仅仅是HTTP连接。