TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇"。TinyFox本身的功能是html服务器,所有的WEB应用,通过加载含有一个OwinMain方法的"应用程序适配器"或"插件"实现,TinyFox与应用程序之间的数据交流格式是 OWIN规范的字典。
TinyFox特点:
1,跨平台:支持windows、linux等常用操作系统;
2,超轻量:功能单一而明确:除了静态文件由自身处理外,其它的应用逻辑直接交给用户处理;
3,高性能:底层基于 libuv 开发,是完全的异步、非阻塞、事件驱动模型,上层代码也经过了高度优化;libuv是NodeJs的基础库,libuv 是一个高性能事件驱动的程序库,封装了 Windows 和 Unix 平台一些底层特性,为开发者提供了统一的 API,libuv 采用了异步 (asynchronous), 事件驱动 (event-driven)的编程风格, 其主要任务是为开人员提供了一套事件循环和基于I/O(或其他活动)通知的回调函数, libuv 提供了一套核心的工具集, 例如定时器, 非阻塞网络编程的支持, 异步访问文件系统, 子进程以及其他功能,关于libuv的更多内容推荐参考电子书 http://www.nowx.org/uvbook/ 。
4,高安全性和高稳定性:本服务器由Jexus Web Server作者开发,在很大程度上承接了JWS的高安全性和高稳定性素质;
狐狸的构成:
轻身如燕,是对这款OwinHost的最直观评价,它非常的小,整个Host的大小用7Z打包了仅仅只有1.26M大小。拆开压缩包之后,我们能够发现几个重要的组成,如下图所示:
“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高强度抗压抗攻击的优点,最大限度的保证了应用的安全性和稳定性。
使用TinyFox的方法:
比起噜里八嗦的介绍,怎么使用才是读者们真正关注的话题,这里我准备了一个NancyFX作为案例,为各位读者讲解。
首先,很常规的,我们准备了一个采用了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; } }
发布后,把网站的全部内容放入到“wwwroot”目录中。
然后双击运行 owinhost.exe 。
我们就可以在浏览器中正常的访问我们的项目了。
如何使用
整个Host的大小用7Z打包了仅仅只有1.26M大小。拆开压缩包之后,我们能够发现几个重要的组成,如下图所示:
windows需要安装.NET4以及版本,非Windows操作系统需要安装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开发或者在具有OWIN接口的应用层框架上开发(比如NancyFx),在此基本上,新建一个类(可称为"适配器""接口"),这个类中,必须有一个叫"OwinMain"的方法(具体格式参见demo),然后把编译后的dll放在网站wwwroot的bin文件夹或approot文件夹中。惊鸿哥写了一篇文章"OwinHost再添新成员:TinyFox",文章详细介绍了如何部署用了OWIN模式的NancyFX的应用。
Tools目录下Jws.Owin-Adapters.zip中有三个"应用"示例,base.demo是最能体现OWIN原始定义,msowin.demo是在插件中加载microsoft.owin.dll进入ms处理OWIN的流程,nancy.demo是在ms owin处理流程(管道)中加载NancyFx,运行NancyFx应用层框架。