首先,得和大家达成一个共识,即AspNetCore项目其实就是一个控制台项目。可以简单的理解,AspNetCore就是将一个Web服务器宿主在一个进程(即控制台)中,然后它在这个进程中进行http请求的监听处理。

AspNetCore中默认使用kestrel作为web服务器,其将接收到的http请求封装成HttpContext对象,然后这个对象经由各个中间件处理,最终返回处理结果。如下所示:

简单聊聊AspNetCore的启动流程

有了kestrel,我们就可以摆脱IIS的捆绑,从而实现跨平台部署。一般在生产环境,我们会在站点前面部署代理服务器,比如nginx或IIS等。如下所示:

简单聊聊AspNetCore的启动流程

言归正传,我们还是来探索一下AspNetCore是如何启动和配置服务器。我们新建一个空的webapi项目,找到程序的入口,我们发现这里有一行代码,如下图所示:

简单聊聊AspNetCore的启动流程

这里代码表示要创建一个WebHost主机,我们先看第一个方法CreateWebHostBuilder中的代码。如下:

简单聊聊AspNetCore的启动流程

WebHost主机其实就是我们配置服务器的地方,你一定很奇怪,我们建一个空的项目,什么也没配置,站点是如何起来的呢?其实在CreateDefaultBuilder方法中会为我们配置一些默认参数。我们进去看一下。如下:

简单聊聊AspNetCore的启动流程

这里面的代码就很直观了,程序会为我们默认很多配置,比如目录、配置文件、日志这些。我们重点要关注UseKestrel这个方法,它就是帮我们配置一个kestrel服务器,配置了它,我们就可以在宿主进程中启动web服务了。我们再来看一下Run()方法。如下图所示:

简单聊聊AspNetCore的启动流程

再进入host.RunAsync方法,这个里面就是真正启动主机并监听端口了。里面使用CancellationToken来控制程序关闭。代码如下:

简单聊聊AspNetCore的启动流程

上面这段代码中应该有很多熟悉的控制台输出,如下图所示:

简单聊聊AspNetCore的启动流程

好了,今天就简单地带大家回顾下AspNetCore项目的启动流程,大家有兴趣的可以去看下源码。其实整体流程非常简单,就是宿主进程中放一个http监听程序。

如果能帮到你一点点,就给个赞吧。哈哈。

相关文章:

  • 2021-10-03
  • 2021-08-30
  • 2021-07-16
  • 2021-06-18
  • 2022-12-23
  • 2022-12-23
  • 2021-06-11
  • 2021-10-23
猜你喜欢
  • 2021-09-03
  • 2022-03-11
  • 2020-09-26
  • 2021-04-12
  • 2022-01-11
  • 2022-01-08
相关资源
相似解决方案