• Kestrel:ASP.NET Core的Web服务器


    与以前版本的ASP.NET相比,我们在ASP.NET Core中托管应用程序的方式已经发生了翻天覆地的变化。Kestrel是ASP.NET Core项目模板中包含的新的默认Web服务器。

    什么是Kestrel?

    Kestrel是基于开源的,跨平台的,事件驱动的,基于异步I / O HTTP的服务器。它被开发成可以在任何平台上托管ASP.NET Core应用程序。默认情况下,它包含在ASP.NET Core应用程序中。

    它基于libuv

    Kestrel是一个开源库,可以在GitHub上找到

    为什么使用Kestrel

    较旧的ASP.NET应用程序与IIS紧密耦合。IIS是一个完整的Web服务器,具有Web服务器所需的所有功能。现在,它已经成为最好的Web服务器之一,但与此同时同时,它也是最慢的Web服务器之一。现在,新设计的ASP.NET Core应用程序已与IIS完全分离。 这种脱钩使ASP.NET Core可以在任何平台上运行,从而使其真正跨平台。但是,它仍然需要具有聆听 HTTP请求并将响应发送回客户端的能力。所以就诞生了Kestrel。

    Kestrel在ASP.NET Core应用程序中以进程方式运行。 因此,它独立于其所处的环境运行。Kestrel Web服务器位于名称空间Microsoft.AspNetCore.Server.Kestrel中。Main方法调用CreateDefaultBuilder,后者负责创建Web应用程序主机。CreateDefaultBuilder调用UseKestrel方法将Kestrel注册为将用于承载我们的应用程序的服务器

    我们可以通过两种方式使用Kestel

    1. 自托管
    2. 在另一个Web服务器之后运行

    自托管

    在Sef Hosting模型下,ASP.NET Core应用程序直接侦听 HTTP 来自互联网的请求,如下图所示。

    该图显示了如何使用Kestrel Web服务器自托管ASP.NET Core应用程序。如何使用dotnet run cli命令来启动Kestrel Web服务器。要运行所有我们需要做的就是进入项目文件夹,在其中找到.csproj文件,然后运行以下命令

    dotnet run

    Kestrel启动并侦听端口5000/5001。

     

    另一种方法是转到已发布的文件夹并运行以下命令,这也将启动kestrel服务器。

    dotnet helloWorld.dll

    在另一个Web服务器之后运行

    Kestrel不是功能齐全的Web服务器。 但这就是使它快速的原因。建议不要在生产环境中将Kestrel作为独立的Web服务器运行。 建议在IIS,Nginx,Apache等功能齐全的Web服务器之后运行它。在这种情况下,Web服务器充当反向代理服务器。反向代理服务器从Internet获取HTTP请求,并将其以接收方式直接传递给Kestrel服务器。

    IIS可以在将请求传递给Kestrel之前接受HTTP请求并执行一些有用的处理,例如日志记录,请求过滤,URL重写。下图显示了其实现方式

    Kestrel Web服务器在另一个Web服务器(如IIS,NGINX,Apache等)后面运行

    在生产中应使用此模型的原因有很多

    • 安全:它提供了可选的附加层配置和防御。简化负载平衡
    • SSL设置:仅我们的反向代理服务器需要SSL证书,并且该服务器可以使用纯HTTP与内部网络上的应用程序服务器进行通信。
    • 与多个地址共享单个IP
    • 请求筛选,日志记录和URL重写等
    • 如果崩溃,它可以确保应用程序重新启动

    CreateDefaultBuilder方法调用UseIISIntegration,它告诉ASP.NET应用程序将使用IIS作为Kestrel前面的反向代理。

    Kestrel Web服务器的好处

    1. Kestrel快。 它不能提供标准Web服务器所期望的许多功能。 因此,它使设计轻巧,快速。
    2. 支持.NET Core的所有版本
    3. 它是跨平台的。 我们可以在Windows / Linux或Mac上运行它。
    4. 配置和运行非常简单。 实际上,当我们在Visual Studio中创建新的ASP.NET Core项目时,它已经配置好了
    5. 支持HTTPS
    6. 支持HTTP / 2(在macOS†上除外)
  • 相关阅读:
    extel操作
    postman 使用post方式提交参数值
    json_encode 转化数组时,中文不转义出现乱码的解决方法
    csnd 不好使,所以我来博客园了
    Nodejs 之Ajax的一个实例(sql单条件查询&并显示在Browser端界面上)
    JS 之JSON
    Nodejs sql模块及模块化思想
    Nodejs之Ajax
    Nodejs 之express框架的应用---简单的登录界面
    Nodejs 入门 12-28
  • 原文地址:https://www.cnblogs.com/yigegaozhongsheng/p/13874884.html
Copyright © 2020-2023  润新知