前言:

  ASP.NET Core 已经不是啥新鲜的东西,很多新启的项目都会首选 Core 做开发;

  而 Kestrel 可以说是微软推出的唯一真正实现跨平台的 Web 服务器了;

  Kestrel 利用一个名为 KestrelEngine 的网络引擎实现对请求的监听、接收和响应;

  Ketrel 之所以具有跨平台的特质,源于 KestrelEngine 是在一个名为 libuv 的跨平台网络库上开发的;

  Kestrel is a cross-platform web server for ASP.NET Core based on libuv, a cross-platform asynchronous I/O library;

一、Kesterl 基本工作原理

  Kestrel 是进程内服务器,以一个包形式提供,自身不能单独运行,与 IIS 不同,它必须 HOST 在一个 .NET 的 WEB 应用程序中。

  它内部封装了对 libuv 的调用,但不是 libuv 库简单的封装库。Kestrel 是个精简的,高效的 Http Server。

  (粗暴流程图)

  

  (基础架构图)

  

  libuv:

    作为I/O底层,屏蔽各系统底层实现差异,为windows下,通过IOCP实现异步;linux下通过epoll实现异步。提供一个主程序和主循环。

  I/O 事件队列:

    对应Libuv的工作队列,为了利用现代服务器的多核处理器,适当的队列数量将提高更大的I/O吞吐能力。

    Kestrel默认为每两个CPU核心设置一个I/O事件队列,但至少有一个I/O事件队列。每个队列对应一个托管线程,该线程不属于线程池。

    用户可以设置队列个数,通过设置KestrelServerOptions.ThreadCount即可,最多设置 16个。

  Kestrel线程:

    事件队列对应的托管线程,主要控制读取事件的循环机制:每次事件循环处理8个事件,然后等待下一次循环。

  非托管内存池:

    这是在 .NET 运行环境分配的非托管内存池,申请的比较大块的堆内存,仅在首次请求或者池剩余空间不足时分配,

    后续请求可以复用,不受GC管理。管理内存页的数据结构采用链表方式。以获取大块连续空间的方式增长。遵循读完后立即释放的处理原则。

  (结构图)

  

二、Kesterl 的使用、配置

  前面说过了,Kesterl 是进程内服务器,默认情况下在 Core 项目中由 Program.cs 启动;  

public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, );
options.Listen(IPAddress.Loopback, , listenOptions =>
{
listenOptions.UseHttps("testCert.pfx", "testPassword");
});
})
.Build();

  配置客户端最大连接、请求大小等信息

.UseKestrel(options =>
{
options.Limits.MaxConcurrentConnections = ;
options.Limits.MaxConcurrentUpgradedConnections = ;
options.Limits.MaxRequestBodySize = * ;
options.Limits.MinRequestBodyDataRate =
new MinDataRate(bytesPerSecond: , gracePeriod: TimeSpan.FromSeconds());
options.Limits.MinResponseDataRate =
new MinDataRate(bytesPerSecond: , gracePeriod: TimeSpan.FromSeconds());
options.Listen(IPAddress.Loopback, );
options.Listen(IPAddress.Loopback, , listenOptions =>
{
listenOptions.UseHttps("testCert.pfx", "testPassword");
});
})

  参考: 

学习笔记参考自:

 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x#tabpanel_N8uGZe26A-_aspnetcore1x

 http://www.cnblogs.com/vipyoumay/p/7525478.html   

Kestrel Web 服务器学习笔记的更多相关文章

  1. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  2. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  3. Web前端学习笔记(001)

    ....编号    ........类别    ............条目  ................明细....................时间 一.Web前端学习笔记         ...

  4. Java web与web gis学习笔记(二)——百度地图API调用

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  5. Java web与web gis学习笔记(一)——Tomcat环境搭建

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  6. Web安全学习笔记 XSS上

    Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...

  7. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  8. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  9. 【前端】Web前端学习笔记【2】

    [2016.02.22至今]的学习笔记. 相关博客: Web前端学习笔记[1] 1. this在 JavaScript 中主要有以下五种使用场景 在全局函数调用中,this 绑定全局对象,浏览器环境全 ...

随机推荐

  1. centos6.9下安装composer

    1.下载composer curl -sS https://getcomposer.org/installer | php ps:如果出现php无法运行的情况,请先把PHP加入环境变量 2.移动或复制 ...

  2. servle 3.0 新特性之一 对上传表单的支持

    1. 上传 * 上传对表单的要求: > method="post" > enctype="multipart/form-data",它的默认值是:a ...

  3. Python基础(7)_闭包函数、装饰器

    一.闭包函数 闭包函数:1.函数内部定义函数,成为内部函数, 2.改内部函数包含对外部作用域,而不是对全局作用域名字的引用那么该内部函数成为闭包函数 #最简单的无参闭包函数 def func1() n ...

  4. docker学习笔记2--对镜像/容器的命令操作

    Docker启动一个Centos镜像 我们下载完成一个Centos镜像之后,开始启动 docker run -d -i -t <imageID> /bin/bash 这样就能启动一个一直停 ...

  5. Zabbix3.0安装与部署(centos7)

    注:整理至http://blog.51cto.com/afterdawn/1923359 1 需要先搭建LAMP环境 http://www.cnblogs.com/cation/p/8882910.h ...

  6. cocos2dx打飞机项目笔记一:项目结构介绍

    最近在学习cocos2dx引擎,版本是2.1.3,开发环境是win7 + vs2010,模仿微信打飞机游戏,开发中参考了 csdn 偶尔e网事 的系列文章:http://blog.csdn.net/c ...

  7. UI基础_transform

    #import "ViewController.h" typedef enum { ButtonTypeLeft = 1, ButtonTypeRight, ButtonTypeU ...

  8. Unity Json 之三

    今天在网上看到一个simplejson,直接调用这两个API就可以了,简单易用 string jsonstr = SimpleJson.SimpleJson.SerializeObject(json) ...

  9. pom.xml里使用了一系列的版本的框架,配置一个版本属性,让使用版本的都引用这个属性

    在pom.xml定义properties标签 <properties> <project.build.sourceEncoding>UTF-8</project.buil ...

  10. Linux FTP 上传一键脚本

    下面来介绍一下这个 FTP 上传一键脚本 ftp_upload.sh. 用途:用于在Linux系统下搭建FTP客户端向FTP服务器端上传文件: 总结一下 ftp_upload.sh 特点:1.支持文件 ...