Kestrel Web 伺服器學習筆記

2022-01-15 17:20:00 字數 1769 閱讀 2500

前言:

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。

(粗暴流程圖)

(基礎架構圖)

作為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)

public

static iwebhost buildwebhost(string args) =>webhost.createdefaultbuilder(args)

.usestartup

() .usekestrel(options =>);

}).build();

配置客戶端最大連線、請求大小等資訊

.usekestrel(options =>);

})

參考:

伺服器學習

安裝環境 apache 命令 etc init.d httpd start stop restart status apache開啟日誌 customlog usr local apache logs web.log combined配置ssl,阿里雲申請證書 在vhost新增配置 document...

伺服器構架學習

在第一家公司工作的時候 並沒有接觸到閘道器伺服器 當時的遊戲伺服器結構很簡單 客戶端直接連到loginserver 然後客戶端在直接連線到gameserver gameserver連線到dbserver去 結構很簡單 寫功能也很簡單 但是伺服器負載人數很很少 並且不吃硬體 明明遊戲很卡了 但是伺服器...

WEB伺服器學習

apache是web伺服器,http伺服器 apache伺服器的設定檔案位於 usr local apache conf 目錄下,傳統上使用三個配置檔案httpd.conf,access.conf和srm.conf,來配置apache伺服器的行為 httpd.conf提供了最基本的伺服器配置,是對守...