Kestrel
概述
-
微软推出的跨平台Web服务器,目前Asp.NET项目都支持Kestrel,而且是默认启用的。那可能有人会问,哪里用到了,答案就是这句代码:
WebApplication.CreateBuilder(args); //调用Kestrel
-
Kestrel利用KestrelEngine(网络引擎)实现对请求的监听,接受和响应,而KestrelEngine是基于libuv开发的,总体来说,就是一个进程内的高效Http Server。其支持以下方案:
配置
在非IIS环境下,Asp.Net项目默认使用的就是Kestrel,因此我们只需要对其进行相关配置即可,无需额外进行创建和引用。
var builder = WebApplication.CreateBuilder(args);
//WebHost中含有多中Http服务器
builder.WebHost.ConfigureKestrel(options =>
{
// Http或Https请求最大并发数
options.Limits.MaxConcurrentConnections = 100;
// 非Http或Https请求,例如WebSocket,最大并发数,默认不受限制
options.Limits.MaxConcurrentUpgradedConnections = 100;
// 请求正文最大大小,默认30000000字节,越28.6MB
/// 在中间件的设置
/// context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 10 * 1024;
options.Limits.MaxRequestBodySize = 10 * 1024;
// 请求正文最小数据速率 MinRequestBodyDataRate MinResponseDataRate
options.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
// 请求正文最小数据速率 MinRequestBodyDataRate MinResponseDataRate
options.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
//保持活动超时
options.Limits.KeepAliveTimeout =
TimeSpan.FromMinutes(2);
// 请求头超时
options.Limits.RequestHeadersTimeout =
TimeSpan.FromMinutes(1);
// 绑定到 TCP 套接字
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("testCert.pfx", "testPassword");
});
// 每个连接的最大流 默认值是100
options.Limits.Http2.MaxStreamsPerConnection = 100;
// 标题表大小 默认值是4096
options.Limits.Http2.HeaderTableSize = 4096;
// 最大帧大小 默认值为 2^14 (16384)
options.Limits.Http2.MaxFrameSize = 16384;
});