c# - 创建多个 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 等来说太多了。什么是最好的或其他方式(使用其他工具或库)如何做到这一点?
解决方案
您一次只能通过一个 TCP 连接发送一个 HTTP 请求。
HTTP 持久性(通常称为 HTTP 管道)允许您使用相同的底层 TCP 连接一个接一个地链接多个 HTTP 请求。这提高了性能,因为运行 HTTP 的底层 TCP 连接不需要在每次要发送 HTTP 请求时重新建立。
如果要运行并行 HTTP 请求,则需要WebRequest()
为每个要运行的并行请求设置一个。然后,您可以将多个请求一个接一个地链接到每个WebRequest()
.
例如,如果您有 100 个想要执行的 URL 请求。
您可以创建 10 个 WebRequest,并让每个 WebRequest 依次请求 100 个 URL 中的 10 个。
推荐阅读
- ios - 会话 ID 在 Safari 浏览器的 iframe 中不可见。在 chrome 和 Firefox 中它工作正常
- php - 以递归方式按值排序数组
- python - 一种遍历行和列的方法(在熊猫数据框中),根据条件选择行和列以放入熊猫另一个数据框
- google-visualization - Google Chart google.visualization.arrayToDataTable:如何传递格式化字符串
- postgresql - 将字符串转换为日期(字符串在 DD 位置可能有空格)
- react-native - 当我开始运行博览会时,我得到错误:GetEnv.NoBoolean: ture is not a boolean
- python - np.polyfit 不会绘制特征,但会给出值
- javascript - 自动完成在动态输入字段中不起作用
- android - 当我使用 Mapsui 在 Android 上截屏时出现白屏
- php - 如何在 Laravel 6 API 中创建自定义验证规则