iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >详解ASP.NET Core高性能服务器HTTP.SYS
  • 361
分享到

详解ASP.NET Core高性能服务器HTTP.SYS

2024-04-02 19:04:59 361人浏览 八月长安
摘要

目录一、Http.SYS简介二、MessagePump & Usehttpsys三、HttpSysOptions如果我们只需要将ASP.net core应用部署到window

如果我们只需要将ASP.net core应用部署到windows环境下,并且希望获得更好的性能,那么我们选择的服务器类型应该是HTTP.SYS。Windows环境下任何针对HTTP的网络监听器/服务器在性能上都无法与HTTP.SYS比肩。

一、HTTP.SYS简介

HTTP.SYS本质上就是一个HTTP/HTTPS监听器,它是Windows网络子系统的一部分,是一个在内核模式下运行的网络驱动。HTTP.SYS对应的驱动文件为“%WinDir\System32\drivers\http.sys”,不要小看这个只有1M多的文件,Windows系统针对HTTP的监听、接收、转发和响应大都依赖它。如图1所示,HTTP.SYS建立在Windows网络子系统针对tcpIP协议栈的驱动(TCPIP.SYS)之上,并为用户态运行的IIS提供基础的HTTP通信服务。前面我们使用的HttpListener也建立在HTTP.SYS上面。

图1 HTTP.SYS

由于HTTP.SYS是在操作系统内核态运行,所以它提供的性能优势是其他在用户态运行的同类产品无法比拟的。由于它自身提供响应缓存,所以在缓存命中的情况下根本不需要与用户态进程进行交互。它还提供了请求队列(Request Queue),如果请求的目标进程(比如IIS的工作进程)处于活动状态,它可以直接将请求分它给它,否则请求会暂存于队列中等待目标进程来提取,这样的工作模式既减少了内核态与用户态之间的上下文切换,也确保请求不会丢失。HTTP.SYS还提供连接管理,流量限制,诊断日志等功能,并提供针对Kerberos的Windows认证。

由于HTTP.SYS是一个底层共享的网络驱动,它有效地解决了端口共享的问题。用户态进程会使用地址前缀(含端口号)“接入”HTTP.SYS,后者利用提供的地址前缀来转发请求,多个用户态进程只要保证提供的地址前缀不同就可以了,所以它们可以使用相同的端口号。端口共享使每个用户进程都可以使用标准的80/443端口。

二、MessagePump & UseHttpSys

基于HTTP.SYS的服务器体现为如下这个MessagePump类型,它内部使用一个HttpSysListener对象采用注册的监听地址接入HTTP.SYS。MessagePump提供针对HTTP 1.X、HTTP 2以及HTTPS的支持。对于Windows Server 2022和Windows 11,还支持HTTP 3。IWEBHostBuilder接口如下这两个UseHttpSys扩展方法用来完成针对MessagePump的注册。

internal class MessagePump : IServer, IDisposable
{
     internal HttpSysListener Listener { get; }
     public IFeatureCollection Features { get; }
     public MessagePump(IOptions<HttpSysOptions> options, ILoggerFactory loggerFactory,IAuthenticationSchemeProvider authentication);
     public Task StartAsync<TContext>(IHttpApplication<TContext> application,CancellationToken cancellationToken);
     public Task StopAsync(CancellationToken cancellationToken);
     public void Dispose();
}
public static class WebHostBuilderHttpSysExtensions
{
    [SupportedOSPlatfORM("windows")]
    public static IWebHostBuilder UseHttpSys(this IWebHostBuilder hostBuilder);

    [SupportedOSPlatform("windows")]
    public static IWebHostBuilder UseHttpSys(this IWebHostBuilder hostBuilder,Action<HttpSysOptions> options);
}

如下所示的是在Minimal api下调用UseHttpSys注册MessagePump 服务器的例子。

var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseHttpSys();
var app = builder.Build();
app.MapGet("/", () => "Hello World");
app.Run();

三、HttpSysOptions

在调用UseHttpSys扩展方法注册基于HTTP.SYS的MessagePump服务器的时候,我们可以利用提供的Action<HttpSysOptions>委托对相关的配置选项进行设置。HttpSysOptions的UrlPrefixes属性返回注册的监听地址前缀,但是最终是否这种直接注册到服务器上的监听器地址,取决于IServerAddressesFeature特性的PreferHostingUrls属性,这一点与KestrelServer是一致的。

public class HttpSysOptions
{
    public UrlPrefixCollection 	        UrlPrefixes { get; }
    public RequestQueueMode 		RequestQueueMode { get; set; }
    public string? 			RequestQueueName { get; set; }
    public long 			RequestQueueLimit { get; set; }
    public AuthenticationManager 	Authentication { get; }
    public ClientCertificateMethod 	ClientCertificateMethod { get; set; }
    public long? 			MaxConnections { get; set; }
    public long? 			MaxRequestBodySize { get; set; }
    public int 			        MaxAccepts { get; set; }
    public Http503VerbosityLevel 	Http503Verbosity { get; set; }
    public TimeoutManager 		Timeouts { get; }
    public bool 			AllowSynchronousIO { get; set; }
    public bool 			EnableResponseCaching { get; set; }
    public bool 			ThrowWriteExceptions { get; set; }
    public bool 			UnsafePreferInlineScheduling { get; set; }
    public bool 			UseLatin1RequestHeaders { get; set; }
}

HTTP.SYS利用请求队列来存放待处理的请求,我们可以利用RequestQueueMode属性决定创建一个新的队列或者使用现有的队列。该属性类型为如下这个RequestQueueMode枚举,枚举项Create表示创建新的队列,Attach表示使用现有的以RequestQueueName属性命名的对象,如果该队列不存在会抛出异常。CreateOrAttach提供了一个折中方案,如果指定名称的队列不存在就创建一个以此命名的新队列。该属性的默认值为Create,RequestQueueName属性默认值为Null(代表匿名队列),RequestQueueLimit属性表示队列的容量,默认值为1000。HttpSysOptions承载的很多配置选项只会应用到新创建的请求队列上。

public enum RequestQueueMode
{
    Create,
    Attach,
    CreateOrAttach
}

HttpSysOptions的Authentication属性返回一个AuthenticationManager对象,我们利用它完成针对认证的设置。我们可以利用Schemes属性设置认证方案,该属性默认为None。如果不允许匿名访问,可以将AllowAnonymous属性设为False。如果将AutomaticAuthentication属性返回True(默认值),认证用户将自动赋值给HttpContext上下文的User属性。AuthenticationDisplayName属性用来为认证方案提供一个显示名称。

public sealed class AuthenticationManager
{
    public AuthenticationSchemes 	Schemes { get; set; }
    public bool 			AllowAnonymous {get; set; }
    public bool 			AutomaticAuthentication { get; set; }
    public string? 			AuthenticationDisplayName { get; set; }
}

[Flags]
public enum AuthenticationSchemes
{
    None 				= 0x0,
    Digest 				= 0x1,
    NeGotiate 				= 0x2,
    Ntlm 				= 0x4,
    Basic 				= 0x8,
    Anonymous 				= 0x8000,
    IntegratedWindowsAuthentication 	= 0x6
}

HTTPS站点可以要求提供证书来对其实施认证,HttpSysOptions的ClientCertificateMethod属性用于设置请求客户端证书的方式,该属性返回如下这个ClientCertificateMethod枚举。在.net 5之前,客户端证书采用Renegotation的方式来提取的,Renegotiation是在已经建立的SSL/TLS连接上再次发起的一轮“协商握手”,这种方式对应AllowRenegotation枚举项。由于可能带来一些性能和死的问题,这种方式在.NET 5之后已经默认禁止了,目前默认的方式是创建SSL/TLS连接的初始阶段就提取该证书,这种方式对应AllowRenegotation枚举项,这也是ClientCertificateMethod属性的默认值。

public enum ClientCertificateMethod
{
    NoCertificate,
    AllowCertificate,
    AllowRenegotation
}

HttpSysOptions的MaxConnections和MaxRequestBodySize属性分别表示最大连接数和请求主体内容的最大字节数,如果它们被设置为Null,意味着忽略对应的限制。这两个属性的默认值分别Null和30,000,000。MaxAccepts属性表示接受的最大并发请求,默认值为当前处理器数量的5倍。如果并发请求数量超过限流设置,后续请求会拒绝处理,此时服务器会直接回复一个状态码为503的响应,与此同时还会根据Http503Verbosity属性设置的等级作相应的处理。如果该属性值为Basic(默认值),当前TCP连接会重置,Full和Limitmed选项会影响响应的状态描述,前者返回详细的Reason Phrase,后者采用标准的“Service Unavailable”。

public enum Http503VerbosityLevel
{
    Basic,
    Limited,
    Full
}

HttpSysOptions的Timeouts属性返回如下这个TimeoutManager对象,我们利用它完成各种超时设置,包括请求主体内容抵达时间(EntityBody)、读取请求主体内容时间(DrainEntityBody),请求在队列中存放的时间(RequestQueue)、连接闲置时间(IdleConnection)和解析请求报头时间(HeaderWait),这些超时时间默认都是两分钟。MinSendBytesPerSecond属性表示响应数据的最小发送率,默认为每秒150字节。

public sealed class TimeoutManager
{
    public TimeSpan 	EntityBody { get; set; }
    public TimeSpan 	DrainEntityBody { get; set; }
    public TimeSpan 	RequestQueue { get; set; }
    public TimeSpan 	IdleConnection { get; set; }
    public TimeSpan 	HeaderWait { get; set; }
    public long 	MinSendBytesPerSecond { get; set; }
}

HttpSysOptions还定义了其他一系列属性。AllowSynchronousIO属性(默认为False)表示是否运行以同步IO的方式完成针对请求和响应主体内容的读写。EnableResponseCaching属性(默认为True)表示允许响应缓存。ThrowWriteExceptions属性(默认为False)表示因断开连接导致写入响应主体内容失败是否需要抛出异常。如果将UnsafePreferInlineScheduling(默认为False)设置为True,意味着会直接在读取请求的IO线程中执行后续的应用代码,否则我们编写的应用代码会分发到线程池中进行处理。这样可以通过避免线程切换减少单个请求的处理耗时,但是会对整体的吞吐量带来负面影响。UseLatin1RequestHeaders属性(默认为False)表示是否采用Latin1字符集(ISO-8859-1)对请求报头进行编码。

到此这篇关于asp.net Core高性能服务器HTTP.SYS的文章就介绍到这了,更多相关ASP.NET Core高性能服务器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解ASP.NET Core高性能服务器HTTP.SYS

本文链接: https://www.lsjlt.com/news/145090.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解ASP.NET Core高性能服务器HTTP.SYS
    目录一、HTTP.SYS简介二、MessagePump & UseHttpSys三、HttpSysOptions如果我们只需要将ASP.NET CORE应用部署到Window...
    99+
    2022-11-13
  • 高性能云服务器
    高性能云服务器是一种用于在计算密集型应用程序中提供高性能计算能力的技术。它可以提供可扩展的I/O吞吐量,以及对CPU和内存的快速访问和处理。 高性能云服务器通常使用服务器虚拟化技术来实现,这意味着它可以在同一个服务器上运行多个虚拟机,以在...
    99+
    2023-10-26
    高性能 服务器
  • 性能调优之java服务器容器调优详解
    目录1.为什么要进行项目性能调优2.服务容器的性能调优2.1对SpringBoot中切入式的Tomcat调优:优化最大线程数调优说明:调优设置2.2网络IO模型调优调优设置2.3容器...
    99+
    2023-05-16
    Java性能调优 Java服务器 Java服务器容器调优
  • 如何提高服务器性能
    提高服务器性能的方法:1、使用内存数据库,将数据放在内存中;2、使用RDD,加快数据处理速度;3、增加服务器缓存来降低访问磁盘带来的时间消耗;4、使用SSD来代替机械硬盘。具体内容如下:使用内存数据库内存数据库,其实就是将数据放在内存中直接...
    99+
    2022-10-06
  • 阿里云服务器10M带宽的性能详解
    阿里云服务器是阿里云提供的高性能计算服务,它的带宽是影响服务器性能的重要因素之一。本文将详细介绍阿里云服务器10M带宽的性能和使用场景。 阿里云服务器的带宽指的是服务器在网络中传输数据的能力,也被称为网络吞吐量。带宽的大小直接影响到服务器的...
    99+
    2023-11-20
    阿里 详解 带宽
  • 详解Linux服务器状态、性能相关命令
    服务器状态分析 查看linux服务器CPU详细情况 #查看CPU的信息 [root@host ~]# cat /proc/cpuinfo  #查看物理CPU的个数 [root@host /]# cat /p...
    99+
    2022-06-04
    linux 服务器命令 linux性能命令
  • 阿里云服务器性能监控的设置详解
    本文将详细讲解如何在阿里云服务器上进行性能监控,包括设置监控指标、配置告警策略以及查看监控数据等。 在云计算环境中,服务器性能监控是非常重要的一环,它可以帮助我们及时发现服务器性能问题,提前进行调整和优化,避免因为性能问题导致的服务中断或服...
    99+
    2023-12-11
    阿里 详解 性能
  • 如何提高服务器的性能
    这篇文章主要介绍“如何提高服务器的性能”,在日常操作中,相信很多人在如何提高服务器的性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提高服务器的性能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!卸载...
    99+
    2023-06-07
  • 40G 阿里云服务器高性能、高可靠性的云计算服务
    在当前数字化时代,云计算已经成为了许多企业和个人的首选解决方案。阿里云作为国内领先的云计算服务提供商之一,其提供的40G阿里云服务器备受关注。本文将详细介绍40G 阿里云服务器的特点和优势,并通过实例来展示其在不同场景下的应用。 1. 强大...
    99+
    2023-12-27
    阿里 高性能 高可靠性
  • 云服务器安全性如何提高性能
    云服务器提供了高性能、可靠性和易用性,使用户能够轻松地管理和配置他们的应用程序。以下是提高云服务器性能的一些方法: 性能优化:优化服务器性能是提高云服务器性能的重要因素。确保使用最佳的硬件和软件、减少服务器硬件故障和优化数据库、缓存和索...
    99+
    2023-10-26
    安全性 性能 服务器
  • 高防服务器的性能有哪些
    高防服务器的性能:1.具备远超共享主机的高稳定性。2.具备适配各类业务的高安全性。3.独享硬件资源以及卓越的性能。具体内容如下:一、高防服务器具有超强稳定性,用户可安装独立的操作系统,不像虚拟主机一样是很多人共享。独立高防服务器可以提供WE...
    99+
    2022-10-17
  • 如何提高香港服务器性能
    提高香港服务器性能的方法:1、将香港服务器进行虚拟化操作;2、使用管理工具来提升香港服务器管理效率;3、升级香港服务器的配置来提高服务器性能。具体内容如下:将服务器虚拟化如果同期拥有多个项目,增加额外服务器会显得浪费,成本费用也会大幅度上升...
    99+
    2022-10-17
  • ASP.NET Core应用程序在IIS服务器上的运行环境介绍和下载安装(超详细)
    前言 要想在 IIS 上成功运行 ASP.NET Core 应用程序,我们需要有ASP.NET Core 运行时和ASP.NET Core Module。而在这里我们仅需要下载ASP.NET Core Hosting Bundle 即可,这...
    99+
    2023-08-31
    .net asp.net
  • 阿里云服务器位置选择类型与性能详解
    阿里云服务器是阿里巴巴推出的一种云服务器解决方案,提供了多种不同类型的服务器供用户选择。不同类型的服务器在性能、位置、价格等方面都有所不同,用户在选择服务器时需要根据自己的实际需求进行选择。本文将详细介绍阿里云服务器的位置选择,以及不同类型...
    99+
    2023-12-13
    阿里 详解 性能
  • 阿里云Netty服务器高性能、高可靠性的网络通信解决方案
    Netty是一个开源的、高性能的、可扩展的、跨平台的网络通信框架。在阿里云上,Netty服务器被广泛应用于各种场景,如Web服务、企业级应用、流媒体服务等。本文将详细探讨阿里云Netty服务器的相关特性、优势以及使用方法。 一、阿里云Net...
    99+
    2023-11-14
    阿里 高性能 网络通信
  • LeetCode 算法题能提高 Apache 服务器性能吗?
    随着互联网的发展,服务器性能的优化越来越重要。Apache 服务器是一个广泛使用的服务器,其性能优化一直是一个热门话题。那么,LeetCode 算法题能否提高 Apache 服务器性能呢?本文将探讨这个问题。 首先,让我们了解一下 Lee...
    99+
    2023-10-25
    leetcode 日志 apache
  • 阿里云2核8g服务器是否够用详解服务器性能与需求
    阿里云作为国内最大的云服务提供商之一,其服务器产品线丰富多样,能满足不同用户的需求。那么,对于普通用户来说,阿里云的2核8g服务器是否足够使用呢?本文将对此进行详细说明。 首先,我们需要了解服务器的性能与需求。服务器的性能主要由CPU、内存...
    99+
    2023-10-30
    服务器 阿里 详解
  • 阿里云服务器多功能、高性能的云计算服务
    简介:阿里云服务器是阿里巴巴集团旗下阿里云计算有限公司推出的一款多功能、高性能的云计算服务。该服务通过提供虚拟化计算、存储、网络等基础设施,为企业和个人用户提供了高效、安全、稳定的云计算平台。 1. 弹性计算阿里云服务器的核心功能之一是弹性...
    99+
    2024-01-01
    阿里 多功能 高性能
  • 阿里云服务器暂停服务功能详解
    本文将详细介绍阿里云服务器暂停服务功能,包括其具体操作步骤和注意事项,帮助用户更好地掌握这一功能,确保服务器的稳定运行。 阿里云服务器暂停服务功能详解随着云计算的不断发展,越来越多的企业和个人开始使用阿里云服务器。然而,服务器的运行过程中难...
    99+
    2023-11-06
    阿里 详解 功能
  • 云服务器显卡性能要求高吗
    云服务器显卡性能的要求取决于你的应用程序和工作负载的需求。如果你需要进行大规模的图形处理、机器学习、深度学习、虚拟化或游戏等任务,那么你需要一台具备高性能显卡的云服务器。 高性能显卡可以提供更快的图形渲染速度和更高的计算能力,从而加速处理...
    99+
    2023-10-26
    显卡 性能 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作