TinyFox 是一款支持OWIN標準的WEB應用的高性能的HTTP服務器,是Jexus Web Server的"姊妹篇"。TinyFox本身的功能是html服務器,所有的WEB應用,通過加載含有一個OwinMain方法的"應用程序適配器"或"插件"實現(xiàn),TinyFox與應用程序之間的數(shù)據(jù)交流格式是 OWIN規(guī)范的字典。
TinyFox特點:
1,跨平臺:支持windows、linux等常用操作系統(tǒng);
2,超輕量:功能單一而明確:除了靜態(tài)文件由自身處理外,其它的應用邏輯直接交給用戶處理;
3,高性能:底層基于 libuv 開發(fā),是完全的異步、非阻塞、事件驅動模型,上層代碼也經過了高度優(yōu)化;libuv是NodeJs的基礎庫,libuv 是一個高性能事件驅動的程序庫,封裝了 Windows 和 Unix 平臺一些底層特性,為開發(fā)者提供了統(tǒng)一的 API,libuv 采用了異步 (asynchronous), 事件驅動 (event-driven)的編程風格, 其主要任務是為開人員提供了一套事件循環(huán)和基于I/O(或其他活動)通知的回調函數(shù), libuv 提供了一套核心的工具集, 例如定時器, 非阻塞網絡編程的支持, 異步訪問文件系統(tǒng), 子進程以及其他功能,關于libuv的更多內容推薦參考電子書 http://www.nowx.org/uvbook/ 。
4,高安全性和高穩(wěn)定性:本服務器由Jexus Web Server作者開發(fā),在很大程度上承接了JWS的高安全性和高穩(wěn)定性素質;
狐貍的構成:
輕身如燕,是對這款OwinHost的最直觀評價,它非常的小,整個Host的大小用7Z打包了僅僅只有1.26M大小。拆開壓縮包之后,我們能夠發(fā)現(xiàn)幾個重要的組成,如下圖所示:
“native”:所有這個OwinHost的支撐組建放在這里。
“site”:我們的OWIN WebApplication 放這里。
“tools”:里面包含了Host的適配器。
“fox.sh”:方便在*nux中啟動Host而寫的腳本文件。
“fox.bat”:方便在Windows中其中Host而寫的批處理文件。
“owinhost.exe”:這個OwinHost的程序主體。
“owinhost.exe.config”:配置文件,通過這個可以CLR版本等。
“ReadMe”:讀我,使用方法和Q&A。
沒了,就這幾個東西,結構很簡單,功能也很“單純”,但性能卻不簡單,采用全異步的事件驅動,同時最大化的繼承Jexus高強度抗壓抗攻擊的優(yōu)點,最大限度的保證了應用的安全性和穩(wěn)定性。
使用TinyFox的方法:
比起嚕里八嗦的介紹,怎么使用才是讀者們真正關注的話題,這里我準備了一個NancyFX作為案例,為各位讀者講解。
首先,很常規(guī)的,我們準備了一個采用了OWIN模式的NancyFX的新站。然后加入Adapter.cs文件,這里我把Adapter的代碼公開,有需要的讀者可以直接拷貝入項目中。
internal class Adapter { private static Func<IDictionary<string, object>, Task> _owinApp; public Adapter() { var builder = new AppBuilder(); var startup = new Startup(); startup.Configuration(builder); _owinApp = builder.Build(); } public Task OwinMain(IDictionary<string, object> env) { if (_owinApp == null) return null; return _owinApp(env); } }
最后修改下NancyFX的默認的根目錄設置,具體操作就是新建一個類,讓他繼承“IRootPathProvider”并重寫“GetRootPath”方法即可,代碼示例如下:
public class RootPath : IRootPathProvider { public string GetRootPath() { var basep = AppDomain.CurrentDomain.BaseDirectory; var rp = Path.Combine(basep, "site", "wwwroot"); return rp; } }
發(fā)布后,把網站的全部內容放入到“wwwroot”目錄中。
然后雙擊運行 owinhost.exe 。
我們就可以在瀏覽器中正常的訪問我們的項目了。
如何使用
整個Host的大小用7Z打包了僅僅只有1.26M大小。拆開壓縮包之后,我們能夠發(fā)現(xiàn)幾個重要的組成,如下圖所示:
windows需要安裝.NET4以及版本,非Windows操作系統(tǒng)需要安裝mono 3.12以上版本;
在 windows上,點擊 TinyFox文件夾中的fox.bat,在linux上輸入 ./fox.sh 就能運行; 當前版本的默認端口是8088,可以修改 fox.bat (windows)或 fox.sh (非windows) 腳本,在 owinhost.exe 后邊加上 "-p 端口號"。
自帶一個測試項目,訪問下面地址
http://localhost:8088/
http://localhost:8088/info
http://localhost:8088/test
你的應用需要基于OWIN開發(fā)或者在具有OWIN接口的應用層框架上開發(fā)(比如NancyFx),在此基本上,新建一個類(可稱為"適配器""接口"),這個類中,必須有一個叫"OwinMain"的方法(具體格式參見demo),然后把編譯后的dll放在網站wwwroot的bin文件夾或approot文件夾中。驚鴻哥寫了一篇文章"OwinHost再添新成員:TinyFox",文章詳細介紹了如何部署用了OWIN模式的NancyFX的應用。
Tools目錄下Jws.Owin-Adapters.zip中有三個"應用"示例,base.demo是最能體現(xiàn)OWIN原始定義,msowin.demo是在插件中加載microsoft.owin.dll進入ms處理OWIN的流程,nancy.demo是在ms owin處理流程(管道)中加載NancyFx,運行NancyFx應用層框架。