首页 > 解决方案 > 创建多个 HTTP 持久连接

问题描述

我知道从 HTTP 1.1 开始默认使用持久连接。我需要做的是建立不止一个持久连接,这样我就可以将多个持久连接会话中的请求发送到一个目标......

是否可以创建从一台 PC 到一个目标网络服务器的多个 HTTP 持久连接?例如,使用HttpWebRequest我在 VisualStudio 中创建了对我的 Apache 网络服务器的 GET 请求(类似于下面的代码),但根据我对网络服务器的 Wireshark 分析,所有这些请求都放在一起并仅通过一个持久连接发送。

while(true){
     var request = (HttpWebRequest)WebRequest.Create(URL);
     var request2 = (HttpWebRequest)WebRequest.Create(URL);
     try {
          using (var response = (HttpWebResponse)request.GetResponse()) { 
               Console.WriteLine(response.Headers);
          }
          using (var response2 = (HttpWebResponse)request2.GetResponse()) {
               Console.WriteLine(response2.Headers);
          }
     }
     catch (WebException e) {
          Console.WriteLine(e);
     }
     Thread.Sleep(2000); //wait for sending next request
}

这样做是因为持久连接的目的,但我想以某种方式避免它并通过多个持久连接会话发送独立的请求。我不想通过使用线程来做到这一点,因为这对 CPU 等来说太多了。什么是最好的或其他方式(使用其他工具或库)如何做到这一点?

标签: c#httptcp

解决方案


您一次只能通过一个 TCP 连接发送一个 HTTP 请求。

HTTP 持久性(通常称为 HTTP 管道)允许您使用相同的底层 TCP 连接一个接一个地链接多个 HTTP 请求。这提高了性能,因为运行 HTTP 的底层 TCP 连接不需要在每次要发送 HTTP 请求时重新建立。

如果要运行并行 HTTP 请求,则需要WebRequest()为每个要运行的并行请求设置一个。然后,您可以将多个请求一个接一个地链接到每个WebRequest().

例如,如果您有 100 个想要执行的 URL 请求。

您可以创建 10 个 WebRequest,并让每个 WebRequest 依次请求 100 个 URL 中的 10 个。


推荐阅读