尽管 InProcess 模式的速度更快,为什么 DotNet Core 中的 Kestrel 却诞生了?

Moh*_*mad 5 .net-core kestrel-http-server asp.net-core

我读了里克·斯特拉尔写的这篇精彩的文章。据称,微软在 DotNet core 2.2 后决定添加InProcess模式,直接使用 IIS 来处理请求,而不是使用OutOfProcessKestrel Web 服务器处理进程。我们知道,在这种模式下,IIS 被用作反向 Web 服务器代理来获取请求并将其发送给 Kestrel。

  <!-- hostingModel is the new property here -->
  <aspNetCore processPath="dotnet" arguments=".\WebApplication1.dll"    
              stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
              hostingModel="InProcess" />
Run Code Online (Sandbox Code Playgroud)

然后Rick Strahl在他的文章中比较了InProcess模式和OutOfProcess模式,得到的结果是直接使用IIS而不使用Kestrel(InProcess模式)进程要快得多。(甚至他证明 IIS 使用原始 Kestrel 速度更快)

有了这个结果,我想知道为什么我们还有 Kestrel?只是为了在其他反向 Web 服务器(例如 Apache Nginx 和...)之前使用我们的 DotNet 核心应用程序?或者还有其他一些使用 OutOfProcess 有用的场景?我简单地说为什么我们应该同时使用两者(IIS + Kestrel)

Oma*_*jid 4

IIS 是唯一可以直接托管.NET 的服务器(正在进行中)。但是所有非 IIS 的跨平台服务器又如何呢?

如果我运行的是 Linux(老实说,大多数云都是 Linux,甚至是 Microsoft),我该使用什么?

这就是为什么我们需要像 Kestrel 这样独立的东西。

此外,在最近的版本中,Kestrel(以及 ASP.NET Core 和 .NET Core)变得更快。TechEmpower 基准测试目前显示,与 Kestrel 一起运行的 ASP.NET Core 与“纯文本”基准测试中最快的框架并列。

https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext