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