我正在尝试使用运行.net 6HttpClient客户端来测量特定请求的服务器响应时间。
在调用之前放置秒表GetAsync通常会在120-140毫秒之间返回。
Url在浏览器(Chrome 和 FireFox、开发人员工具上的网络选项卡)上检查 Same 大约会在30-40毫秒后正常返回。
查看服务器日志通常显示20-25毫秒。(仅显示纯服务器响应时间)
我认为造成巨大差距的原因是因为在我的HttpClient测量中我还计算了 DNS 查找、TLS 握手等。
使用 Curl 我可以得到时间的细分:
time_namelookup: 0.003154s
time_connect: 0.049069s
time_appconnect: 0.121174s
time_pretransfer: 0.121269s
time_redirect: 0.000000s
time_starttransfer: 0.170894s
time_total: 0.171033s
Run Code Online (Sandbox Code Playgroud)
我可以使用 C# 执行这种时间分解吗HttpClient?
DelegatingHandler我在使用和放置Stopwatchbefore方面取得了一些进展SendAsync。(比总时间少了大约 5 毫秒 - 我猜是在 dns 查找之后)
我发现关于此的文档很少,有什么指示吗?
提前致谢。
我正在尝试使用真正基本的 ASP.NET Core 6 应用程序实现简单的流(非缓冲输出)。
以下简单代码应将 hello world 文本输出到客户端,然后关闭连接(甚至通过添加文档IHttpResponseBodyFeature选项):
app.MapGet("/a", async (ctx) =>
{
var gg = ctx.Features.Get<Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature>()!;
gg.DisableBuffering();
await ctx.Response.Body.WriteAsync(Encoding.UTF8.GetBytes("Hello, World!"));
await ctx.Response.Body.FlushAsync();
await Task.Delay(2000);
});
Run Code Online (Sandbox Code Playgroud)
这当然是我试图实现的行为的一个简单示例。
对应用程序的简单curl 请求可以显示hello world 文本仅在等待2 秒后才到达客户端。
在 .NET Framework 上,以下代码按预期工作:
Response.Clear();
Response.Buffer = false;
Response.BufferOutput = false;
Response.Output.WriteLine("Hello World!");
Response.Output.Flush();
System.Threading.Tasks.Task.Delay(2000).Wait();
Response.End();
Run Code Online (Sandbox Code Playgroud)
简单的curl请求会立即显示“hello world”文本,2秒后连接关闭。
提前致谢。