是否可以使用HTTP连接池?

问题描述:

对于联系有限组的其他服务器的C#web服务,我希望为每个想要联系的服务器创建一个HTTP连接池。是否可以使用HTTP连接池?

课程的基本理念:

  • 每个池应打开几个连接(可连接3个?)对其进行远程Web服务器,并保持这些连接活着。
  • 应该使用最长生命周期来回收(断开/重新连接)到远程Web服务器的连接,从而防止远程Web服务器在我们断开之前断开连接。
  • 不应该同时创建连接,而是在3个连接之间有一点暂停,这样回收也不会同时发生。
  • 如果远程网络服务器仍然意外断开连接,应该注意,我们应该重新连接。
  • 如果由于某种原因无法重新连接,应该稍后暂停重试。

这样,当我想发送一个HttpWebRequest时,我已准备好使用连接,在我想使用它的时刻节省了建立连接的时间。

目前我不知道这是否甚至是HttpWebRequest的默认功能。很抱歉,如果我要求明显的。谷歌搜索只为我带来类似的Java问题。

问题1:.NET/c#中存在这样的事情吗?

问题2:如果没有,网上有这方面的资源,你知道吗?

问题3:如果不是,自己如何建设一座?

+0

相关:[HTTP连接池(http://*.com/questions/15077526/http-connection-pooling) – slugster 2013-02-26 09:47:23

+0

很抱歉,如果我误解了你的问题,或者它的内容,而不是简单地这样做通过在.NET中使用WebSockets /长轮询? SignalR会很好地工作。 – 2013-02-26 09:49:11

HttpWebRequest(实质上是指.net中的所有Http API)已经使用连接池默认为

如果您需要管理连接池的任何参数,请参阅ServicePointServicePointManager类。

+0

我一直在分析tcp数据包以找出发生了什么。看起来HttpWebRequest确实重用了一个连接,如果它可以支持保持连接的话,但它不会主动尝试保持连接。手动(没有c#)我可以通过每10秒发送一个(是否没有HTTP NOOP命令?!)简单换行符“\ n”来保持与Apache的连接,以避免Apache达到超时,但我不能我认为这是一种正式的做法。我也可以做一个HEAD请求,也应该保持连接活着,但需要Keep-Alive并产生更多的流量 – 2013-02-26 12:57:23

+0

我想看到的是保持连接活跃的c#(就像我能够手动)。当它因任何原因断开连接(达到超时,达到KeepAliveTimout,达到MaxKeepAliveRequests)时,c#将直接重新连接,而不是等到我想再次使用连接。 – 2013-02-26 13:04:52

+0

Ow和BTW。我可以看到HttpWebRequest一次又一次地使用同一个ServicePoint。并用httpWebRequest.ServicePoint.GetHashCode()确认它。但即使连接断开,在您执行新请求之前,c#只是静静地重新连接并返回相同的散列码。所以ServicePoint和哈希码保持不变,但它是一个新的连接,不幸的是只有当你尝试使用时才建立。 – 2013-02-26 13:09:45