gpt4 book ai didi

servicestack - HttpClient 将 HTTP GET 请求流水线化到 ServiceStack API

转载 作者:行者123 更新时间:2023-12-04 03:55:25 24 4
gpt4 key购买 nike

首先,我有 ServiceStack 作为我的服务器,它提供 RESTful HTTP API。

这是一个例子。

public void GET(XXXXXRequest request)
{
System.Threading.Thread.Sleep(2000);
}

然后我使用 System.Net.Http.HttpClient访问它。
据说 here , HttpClient对于通过同一 TCP 连接发送 HTTP GET 请求的大多数方法来说,它是线程安全的。

所以我有一个 HttpClient 的单例实例,如下所示
HttpClient _httpClient = new HttpClient(new WebRequestHandler()
{
AllowPipelining = true
});

然后我使用以下测试代码在前一个响应之后发送请求
await _httpClient.SendAsync(request1, HttpCompletionOption.ResponseContentRead);
await _httpClient.SendAsync(request2, HttpCompletionOption.ResponseContentRead);
await _httpClient.SendAsync(request3, HttpCompletionOption.ResponseContentRead);

smart sniffer ,我确实看到请求是在一个连接中发送的,它是这样的:
Client -> Request1
Client <- Response1
Client -> Request2
Client <- Response2
Client -> Request3
Client <- Response3

现在我将代码更改为“即发即忘”模式,如下所示。
_httpClient.SendAsync(request1, HttpCompletionOption.ResponseContentRead);
_httpClient.SendAsync(request2, HttpCompletionOption.ResponseContentRead);
_httpClient.SendAsync(request3, HttpCompletionOption.ResponseContentRead);

以便发送请求而无需等待先前的响应和我 期待 请求和响应如下
Client -> Request1
Client -> Request2
Client -> Request3
Client <- Response1
Client <- Response2
Client <- Response3

这是 HTTP pipeline并且非常适合性能。

enter image description here

但是从我的测试中,我看到为每个 HTTP GET 请求建立了 3 个连接,但它没有按我预期的那样工作。

关于 AllowPipelining属性(property), MSDN

An application uses the AllowPipelining property to indicate a preference for pipelined connections. When AllowPipelining is true, an application makes pipelined connections to the servers that support them.



所以,我想 HttpClient是否支持流水线,问题出在ServiceStack? ServiceStack 中是否有一些选项可以启用 HTTP 流水线?

最佳答案

流水线是在非常低的级别完成的,甚至低于 IIS(在 http.sys 内核模式驱动程序中)。虽然我无法解释您所看到的行为,但我可以自信地说 ServiceStack 不会支持它。它是一个 HttpHandler,它唯一关心的是如何处理请求并返回响应。

关于servicestack - HttpClient 将 HTTP GET 请求流水线化到 ServiceStack API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31986624/

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