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