HttpWebRequest.KeepAlive vs ServicePoint.SetTcpKeepAlive

时间:2014-05-20 06:49:46

标签: c# .net httpwebrequest

任何人都可以解释下面的示例代码有什么区别/含义,假设我有一个HttpWebRequest对象"请求"?

request.KeepAlive = true;
request.ServicePoint.SetTcpKeepAlive(true, 1000, 5000);

在上面的示例中,我将两者都设置为True。如果我将一个设置为True而另一个设置为False会怎么样?有什么含义?

1 个答案:

答案 0 :(得分:5)

这是两个不同的功能。

HTTPWebRequest.KeepAlive指的是HTTP persistent connection功能,其中套接字可以重新用于后续的HTTP请求。

ServicePoint.SetTcpKeepAlive指的是TCP keepalive功能,它可以在长时间不活动后保持套接字关闭,并提供检测连接是否在不活动期间被丢弃的功能。

使用两者或两者都是安全的,或两者的任意组合。我认为在HTTP连接上使用TCP keepalive是不典型的。我推测,如果有某种操作,服务器没有义务在事件发生之前做出响应,那么可以使用它。例如:喜欢通过HTTP进行长时间轮询。