什么是Kestrel服務器
Kestrel是開源的(GitHub提供的源代碼),事件驅動的異步I / O服務器,用于在任何平臺上托管ASP.NET應用程序。這是一個監聽服務器和一個命令行界面。您將偵聽服務器安裝在Windows或Linux服務器上,并在計算機上安裝命令行界面(安裝.netcore會自動一整套安裝)。(Kestrel發音:['kestr(?)l])
它是與ASP.NET Core一起由微軟推出的。所有ASP.NET Core應用程序都使用新的MVC框架和Kestrel Web服務器。這些新的應用程序可以運行在完整的.NET 或.NET Core上。
Kestrel Web服務器的概述
Kestrel被認為是較新的ASP.NET應用程序的首選Web服務器(請參閱這篇文章與IIS比較靜態文件服務器是什么,why you need both)。它j機遇libuv library,與node.js使用的庫相同。Libuv支持事件驅動的編程風格。它的一些核心工具包括:
它允許ASP.NET Core應用程序在其他跨平臺的Web服務器(如Jexus,Nginx和Apache)上輕松運行,而無需解決不同的啟動配置。通過使用Kestrel作為進程內服務器,即使有跨平臺支持,應用程序也將具有一致的處理(Startup (Main(),Startup.(),Startup.())
Kestrel Web服務器的工作原理
應用程序通常是為了響應人的行為而編寫的。使用事件驅動的編程,有一個循環來監聽事件。然后觸發一個回調函數。為了減少SYS調用的數量,所有其他工作都在標準.NET工作線程的托管代碼中執行。
Kestrel提供了一個事件循環和基于回調的I / O通知。Libuv管理從操作系統收集和監視事件。此外,用戶可以在事件發生時注冊回調。所以,Kestrel使用libuv進行I / O工作,并支持運行多個事件循環。
由于它輕巧,Kestrel不允許你進行SSL ,URL重寫或GZip壓縮,但是相同的輕量級設計使他比起其他服務器會更快。實際上,它比靜態和純文本操作的node.js快6倍。
Kestrel的好處
Kestrel支持.NET Core支持的所有平臺和版本。此外,它默認包含的ASP.NET Core新項目模板中,可以提供更好的請求處理的性能。在Visual Studio中創建新項目時,項目會自動配置為在Kestrel中運行。
如前所述,這不是一個功能齊全的網絡服務器,但這正是為什么它很快。如果您覺得需要速度,Kestrel就是答案 - 特別是因為它被設計用于ASP.NETCore的生產。
你可以做的是在一個功能更全面的網絡服務器(如IIS或NGNIX)之后運行它。您可以使用在IIS后面運行它,或者在Visual Studio后面使用在IIS Express后面運行它。而且,您需要在ASP.NET Core項目中支持它,以便開發人員可以在任何支持的平臺上方便地運行它們。
現在,即使您不是跨平臺的,也可以直接從web服務器命令行上運行ASP.NET。
由于Kestrel不是一個全功能的Web服務器,您應該讓web程序在在IIS或NGNIX之后運行(IIS;Jexus或者NGINX代理web程序靜態文件服務器是什么,提供轉發到Kestrel的形式工作)。它旨在使ASP.NET盡可能快,但其管理安全性和提供靜態文件的能力有限。如果您使用的是Kestrel作為web服務器的ASP.NET Core,則 可以利用Prefix來實現強大的代碼分析功能。