gpt4 book ai didi

.net - 连接保持事件状态不适用于某些主机上的 System.Net.Http.HttpClient

转载 作者:可可西里 更新时间:2023-11-01 02:31:21 25 4
gpt4 key购买 nike

我正在使用 .NET System.Net.Http.HttpClient 试验 Heroku API。特别是,我希望 keep-alive 工作,以便我可以使用一个 TCP 连接发送多个 HTTP 请求,并且只执行一次 SSL 握手,而不是为每个请求设置一个 SSL 握手的 TCP 连接。

我正在针对 https://api.heroku.com/status 进行测试这提供了一个不错的 HTTP 200,并使用 Wireshark 监控 TCP 流量。

Google Chrome、ApacheBench(带有 -k 标志)和 curl 似乎都能够保持 TCP 连接打开并发送多个请求。 HttpClient,没那么多。我还针对其他主机(例如 https://google.com/)测试了 HttpClient,我只看到一个 SSL 握手/TCP 设置。所以这似乎是 HttpClient 和 Heroku API 之间的不良交互。

这是我正在测试的代码:

private static async void TestUrl(string url)
{
using (var client = GetClient())
{
await client.GetAsync(url);
await client.GetAsync(url);
await client.GetAsync(url);
await client.GetAsync(url);
}
}

private static HttpClient GetClient()
{
var requestHandler = new HttpClientHandler
{
UseCookies = false,
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
};

return new HttpClient(requestHandler);
}

我还附上了一张 Wireshark 屏幕截图,显示了 HttpClient 如何决定在完成接收数据后立即重置 (RST) 连接。

Wireshark screenshot

对这里发生的事情有什么建议吗?

最佳答案

使用 WebRequestHandler 类代替 HttpClientHandler 并设置属性 HttpWebRequest.UnsafeAuthenticatedConnectionSharing 为真。

关于.net - 连接保持事件状态不适用于某些主机上的 System.Net.Http.HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17894739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com