# Kestrel_Init **Repository Path**: tangss_695/kestrel_init ## Basic Information - **Project Name**: Kestrel_Init - **Description**: 学习Kestrel服务器 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-09 - **Last Updated**: 2024-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、前言 本篇文章帮助读者快速了解Kestrel,以及在ASP.NET CORE中如何配置Kestrel相关信息。 # 二、Kestrel简介 ## 1.**什么是Kestrel?** Kestrel是一个跨平台的Web服务器,Kestrel是开源的事件驱动的异步I/O服务器,会默认在ASP.NET Core项目模板中对其进行配置。未使用IIS托管时,ASP.NET Core项目模板默认使用 Kestrel。 使用Kestrel作为Web服务器,开发人员可以以简单和灵活的方式部署和托管ASP.NET Core应用程序。它是ASP.NET Core开发中不可或缺的一部分,为开发人员提供了强大而可靠的Web服务器功能。 | **类型** | **地址** | |----|----| | 教程地址 | https://www.bilibili.com/video/BV1Hw41137nP/?spm_id_from=333.788&vd_source=bad95ca6359389d05c64799ee99a25be | ## 2.**Kestrel的功能** | 功能 | 说明 | | ------------------- | ------------------------------------------------------------ | | 跨平台 | Kestrel是可在 Windows、Linux 和 macOS 上运行的跨平台 Web 服务器。 | | 高性能 | Kestrel经过优化,可有效处理大量并发连接。 | | 轻量级 | 它经过优化,可在资源受限的环境(如容器和边缘设备)中运行。 | | 强化了安全性 | Kestrel支持 HTTPS 并经过强化可抵御 Web 服务器漏洞。 | | 宽协议支持 | Kestrel 支持常见的 Web 协议,包括:HTTP/1.1、HTTP/2和HTTP/3和WebSockets。 | | 与ASP.NET Core 集成 | 与其他 ASP.NET Core 组件(例如中间件管道、依赖项注入和配置系统)无缝集成。 | | 灵活工作负载 | Kestrel 支持许多工作负载:ASP.NET 应用框架,例如最小 API、MVC、Razor 页、SignalR、Blazor 和 gRPC。使用 YARP 生成反向代理。 | | 扩展性 | 通过配置、中间件和自定义传输自定义 Kestrel。 | | 性能诊断 | Kestrel 提供内置的性能诊断功能,例如日志记录和指标。 | ## 3.**Kestrel启动过程** | 序号 | 过程 | | -------------- | ------------------------------------------------------------ | | ① | builder.Builder()时,完成Kestrel服务注入IServer.KestrelServerImp | | ② | app.run时,将Http管理(委托)交付给Kestrel | | ③ | Kestrel根据配置的监听信息,启动线程死循环监听,有请求再交给Http管理处理 | ## 4.**Kestrel服务器做了什么?** | 序号 | 过程 | | -------------- | ------------------------------------------------------- | | ① | ASP.NET中的Kestrel服务器只是对Socket的简单封闭; | | ② | 直接用Socker通过while(true)的方式来循环接收Socker请求; | | ③ | 然后直接放在ch线程池中来等待线程池调度处理。 | ## 5.**ASP.NET做了什么?** | 序号 | 过程 | | -------------- | --------------------------- | | ① | 准备了Kestrel监听Socker请求 | | ② | 准备了Http管理处理请求 | # 三、IIS服务器启动项目 ## 1.**使用IIS Express启动(轻量级IIS服务器)** ![](images/1.png) 运行效果如下: | | | |-----------------------|-----------------------| | **轻量级IIS服务器** | **Web网站** | | ![](images/2.png) | ![](images/3.png) | # 四、Kestrel服务器启动项目 ## 1.**用“http”或“https”启动项目** ![](images/4.png) 运行效果如下: ![](images/5.png) ## 2.**用dotnet run命令启动项目** ![](images/6.png) 运行效果如下: ![](images/7.png) ## 3.**用dotnet run自定义端口号命令启动项目** | 序号 | 命令 | | -------------- | ------------------------------------------------------------ | | ① | dotnet run --urls="http://*:5726" | | ② | dotnet run --urls="http://*:5726" ip="127.0.0.1" | | ③ | dotnet run --urls="http://*:5726" --ip="127.0.0.1" | | ④ | dotnet run --urls="http://*:5726" port=5726 | | ⑤ | dotnet run --urls="http://*:5726" --port=5726 | | ⑥ | dotnet run --urls="http://*:5726" ip="127.0.0.1" port=5726 | | ⑦ | dotnet run --urls="http://*:5726" --ip="127.0.0.1" --port=5726 | | ⑧ | dotnet run --urls="http://*:5726" | 运行效果如下: ![](images/8.png) ## 4.**代码中配置启动项目** | | | |----|----| | **类型** | **地址** | | 配置说明 | https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel/options?view=aspnetcore-8.0 | 代码配置(可以监听多个端口号): ![](images/9.png) 运行效果如下: ![](images/10.png) ![](images/11.png) ![](images/12.png) ## 5.**操作配置文件** 在appsettings.json中配置终结点:Kestrel可以从 IConfiguration 实例加载终结点。 默认情况下,Kestrel 配置从 Kestrel 部分加载,终结点在 Kestrel:Endpoints 中配置: ![](images/13.png) 运行效果如下: ![](images/14.png) # 五、尾声 本人邮箱(732320850@qq.com),有需要可以@我互相交流一下技术和经验。