前言:

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()

.UseKestrel(options=>{

options.Listen(IPAddress.Loopback,5000);

options.Listen(IPAddress.Loopback,5001, listenOptions =>{

listenOptions.UseHttps("testCert.pfx", "testPassword");

});

})

.Build();

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

.UseKestrel(options =>{

options.Limits.MaxConcurrentConnections= 100;

options.Limits.MaxConcurrentUpgradedConnections= 100;

options.Limits.MaxRequestBodySize= 10 * 1024;

options.Limits.MinRequestBodyDataRate=

new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));

options.Limits.MinResponseDataRate=

new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));

options.Listen(IPAddress.Loopback,5000);

options.Listen(IPAddress.Loopback,5001, 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 java_Kestrel Web 服务器学习笔记相关推荐

  1. Windows2003搭建web服务器(学习笔记)

    Windows2003搭建web服务器 第一步:IIS安装 开始->控制面板->添加或删除程序->添加/删除windows组件. 勾选应用程序服务器并双击打开->然后选择Int ...

  2. python web服务器学习笔记(五) 并发尝试之popen原理探究

    使用popen新开进程能实现并发吗?像这样的cgi处理程序 def run_cgi(self,handler):cmd = "python" +handler.full_pathc ...

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

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

  4. Web Components 学习笔记一: Web Components是什么?解决了什么问题?

    公众号:妙蛙种子前端 文章原文地址:Web Components笔记一: Web Components是什么?解决了什么问题? | 妙蛙种子 - 记录WEB前端技术学习成长过程的博客 Web Comp ...

  5. web安全学习笔记--sql语句(sql注入基础上)

    一.基础知和表内操作语法 1.sql语句对大小写不敏感!!! SELECT - 从数据库表中获取数据:select * from (columns/tables/databases); UPDATE ...

  6. web前端学习笔记(最新)

    web前端学习笔记 大家好,我是链表哥,新的学期,新的学习,我会为您展示我的学习进程. 一:什么是WEB前端? 所谓的Web前端指的是用户所能接触到的,并服务于用户的前沿端口,经我们程序员编辑修饰后展 ...

  7. web安全学习笔记--基础入门

    一.名词 1.DNS(域名系统):将域名和IP地址相互映射的一个分布式数据库,便于用户访问:UDP/TCP端口为53,利用cmd中ping命令可以查看域名所对应的ip号 2.CDN(内容分发网络):将 ...

  8. Web Service学习笔记

    Web Service概述 Web Service的定义 W3C组织对其的定义例如以下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的A ...

  9. MySQL服务器学习笔记!(二) ——数据库各项操作

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://foreveryan.blog.51cto.com/3508502/657640 ...

最新文章

  1. adt eclipse java1.8,android java开发 第一天 之熟习eclipse adt
  2. f分布表完整图_【教育统计答疑】如何理解正态分布、均值分布、^2分布、t分布和F分布...
  3. matlab中now函数_now()方法以及JavaScript中的示例
  4. xcode w情ndows版,xcode Windows版安装使用介绍
  5. 配置环境JDK Tomcat Maven
  6. 计算机组成原理中dubs是什么意思,计算机组成原理》课程设计报告.docx
  7. 关于 WebRequest.RegisterPrefix
  8. php使用referer,PHP利用REFERER根居访问来地址进行页面跳转
  9. 黑苹果efi文件_台式机华硕主板黑苹果EFI引导文件分享amp;2020.12.2
  10. Java项目--网页版音乐播放器(Spring Boot 后端逻辑)
  11. matlab车牌识别课程设计报告模板(附源代码)
  12. 软件工程人才的社会需求现状与发展趋势分析
  13. Matlab中如何清除persistent 变量
  14. Cell子刊:北大姜长涛组发现HIF-2α通过肠道菌群调控脂肪产热
  15. 发送RST报文的几种可能的情况
  16. 电商企业营销案例方案:2019年618大促用红包推广引流
  17. c# Dispose实现 MSDN官方教程
  18. Java生态浩如烟海
  19. GPS网检验重复边和同步环是否合格
  20. [转]IText导出word之页眉页脚页码

热门文章

  1. lcd屏和amoled屏哪个护眼呢 lcd屏和amoled屏哪个更耗电
  2. Xiaojie雷达之路---MATLAB仿真---给信号添加高斯白噪声
  3. 苹果手机语音备忘录在哪_苹果手机删除的备忘录怎样找回?方法简单,3秒学会!赶紧来看...
  4. 编译安装zabbix时遇到configure: error: no acceptable C compiler found in $PATH 问题解决
  5. 电商网站业务流程图示例
  6. 台式您想使用系统还原计算机吗,系统还原功能已关闭。如果继续安装,将不能使用系统还原随您的计算机运行的Windows操作系统提供的Windows - Microsoft Community...
  7. 机器学习稀疏之L0正则化
  8. k8s探针检测php,K8S教程(7)使用探针对容器进行健康检查
  9. 氟改性UiO-66|3,4-二羟基苯甲醛改性UiO-66-NH2|喜树碱衍生物/寡肽@ZIF-8纳米载药体系
  10. Linux 库打桩机制