于2015年6月首次公开发布。为配合Tinyfox的实际应用,在Tinyfox发布后相继推出了 Tinyfox.FastWebApi 和Tinyfox.WebSocket 两个关键的应用框架,构成了相对完整而独立的基于OWIN协议的面向Web应用的服务系统。

正因为原始的 Tinyfox 本质上是一款以 Microsoft OWIN 协议为基石的 OWIN基础引擎,虽然具备了基础层面的坚固与强大,但是,Web应用层与其OWIN内核层之间需要进行较为低阶的数据转换和封装,这个过程,不但对性能有一定的影响,也对Tinyfox使用者提出了更高的要求,它需要开发者对OWIN协议及其管道模型具有较为深入的理解才能开发出更强大的应用程序,这与现实情况出现了不小的反差,既不利于用户使用,也不利于Tinyfox的发展。

为了克服传统Tinyfox的不足,Tinyfox的原作者宇内流云先生(也是Jexus的作者)结合目前主流的Web系统的特点、.NET最新发展成果以及总结 Tinyfox 近10年来各类用户的需求规律,于2024年12月初开始对其进行了全新设计,并于2025年1月18日在nuget.org上发布了第一个全新的Tinyfox版本:Tinyfox v6.0.118。

新版Tinyfox有如下特点:

1,去除了OWIN协议。

新版Tinyfox的网络传输层与应用层紧密接合,不再使用OWIN协议进行转换、包装,不但进一步提升了性能,也大大简化了操作过程,降低了学习和使用门槛;

2,集成WebApi和WebSocket,新增“动态HTML”功能。

新版Tinyfox不再将应用层功能分散到 Tinyfox.FastWebApi 和 Tinyfox.WebSocket 等子框架中,而是与 Tinyfox 的 HTTP内核集成为一个整体。值得一提的是,新版Tinyfox在原生支持WebApi和WebSocket等“纯数据服务”的同时,还新增了对html文件的扩展支持,即“动态HTML”。“动态HTML”是通过在html文件中添加“标签”的方式使普通的html文件具备“动态性”(在html中对变量赋值、取值以及直接与宿主程序的函数互动)。动态HTML特性的加入,使Tinyfox具备了直接开发出具有UI界面的WEB网站程序的能力,而无需Asp.Net Core、Java Spring或PHP等等其它WEB框架或引擎的支持。

3,超轻量、极强的独立性、普适性和对.NET AOT天然支持。

新版Tinyfox所有功能集中在一个大小仅为200K字节左右的 .net dll中,通过nuget引用,不依赖任何第三方组件。

Tinyfox自带HTTP服务引擎,其通讯组件不使用.NET Socket的任何东西,完全基于操作系统底层函数并针对HTTP服务的特点进行原生开发。正因为这样,Tinyfox 无需 IIS、Jexus、Nginx 等外部WEB服务器的支持就能独立对外提供基于HTTP协议的高性能网络服务。

新版Tinyfox既支持.NET Frameowrk 4.5.1以上版本的传统.NET框架,也支持 .NET 6以上版本的.NET“新世界”,既支持Windows,也也支持Linux(包括“国产操作系统”),既支持x86/x86_64,也支持arm/aarch64,甚至还支持国产的龙芯CPU。它可以嵌入到任何.NET程序中,对目标环境具有广泛的适应性。为了支持.NET NativeAOT,新版Tinyfox的本身已去除了外部.NET程序集动态加载、动态反射等影响 NativeAOT 操作的相关代码,为用户基于Tinyfox打造独立性极强且源码安全的商业程序提供了框架层面的关键支持。

4,易用性、开放性与完整的开发文档。

简单易用是新版Tinyfox的最明显特点之一,它完全去除了旧版Tinyfox所使用的不易理解OWIN协议,用户无需再与任何原始协议打交道,仅需一句诸如“Fox.Router["/"] = _ => new TextResult("Hello")” 这样简单的代码就能实现数据输出,熟悉 c# 的朋友仅需认真看一看Tinyfox用户手册,快的只需要几分钟就能轻松上手。

为了不重蹈其它框架越做越大、越做越庞杂、越做越低效的覆辙,Tinyfox自身的开发设计严守“边界”二字,即,把全部精力用于网络层、WebApi、WebSocket和动态HTML等几个关键功能模块的优化完善和对外接口标准化建设方面,力求内核的高效、坚固,绝不轻易添加功能而突破设计“边界”。与此同时,为了适应不同用户的特定需求,新版Tinyfox不管是WebApi还是WebSokcet,它与用户应用层有关的基类都进行了开放,任何用户都可以根据其具体项目的需求对Tinyfox的功能进行自由派生、任意拓展。

旧版Tinyfox最缺的是开发文档,不少老用户在使用旧Tinyfox时,要么是依靠网上零散的技术博文自我摸索着使用,要么是与作者联系,在作者的指导下进行开发。为了克服这个不足,新版Tinyfox有了自己的“家”:官网 www.tinyfox.pro。现在,Tinyfox用户已经可以在Tinyfox官网上获取完整的Tinyfox用户手册,无需作者单独指导也无需自己作太多的摸索,就能掌握相对完整的Tinyfox使用方法和开发技能。

旧版Tinyfox是否继续维护,如何区分新旧Tinyfox? 

新版Tinyfox与旧版Tinyfox是两个完全不同的框架,但是,为了保证基于旧版Tinyfox所开发的应用程序的可持续性,我们会继续维护旧版Tinyfox(修复新发现的BUG、对内核关键代码持续优化)。新旧两版Tinyfox的分界线是它们的版本号,新版Tinyfox的版本号命名是从6.0开始的,只要是高于6.0的Tinyfox就是新版Tinyfox,传统Tinyfox的版本号将保持在4.x-5.x以内(目前最新的旧版TinyFox是 Tinyfox v4.2.9),因此,基于旧版Tinyfox开发的程序无需担心因新版Tinyfox的诞生而影响旧版的可持续性。

Tinyfox 发生重大改版的更多相关文章

  1. 一次I/O问题引发的P0重大故障[改版重推] 原创 二马读书 二马读书 8月16日 这是前段时间发的一篇文章,很多读者反馈,文章没有揭示故障发生的详细

    一次I/O问题引发的P0重大故障[改版重推] 原创 二马读书 二马读书 8月16日 这是前段时间发的一篇文章,很多读者反馈,文章没有揭示故障发生的详细

  2. 最详细的网站改版SEO优化指南:如何让排名不降反升

    我知道,网站改版很是让人头疼.首先,这个过程需要很长时间还有大量工作要做,并且通常结果不会如你的预期.其次,改版确实有破坏之前为 SEO 所做努力的风险. 但不要因为通常网站改版带来排名下降就认为这是 ...

  3. 知乎改版api接口之scrapy自动登陆

    最近使用scrapy模拟登陆知乎,发现所有接口都发生变化了,包括验证码也发生了很大变化,通过抓包分析,记录下改版后的知乎模拟登陆,废话不多说,直接上代码,亲测有效 # -*- coding: utf- ...

  4. Indy 10.5.8 for Delphi and Lazarus 修改版(2011)

    Indy 10.5.8 for Delphi and Lazarus 修改版(2011)    Internet Direct(Indy)是一组开放源代码的Internet组件,涵盖了几乎所有流行的I ...

  5. 苹果iOS11重磅改版App Store,开发者应该了解这些

    苹果在WWDC2017上重磅发布iOS11,其中一项重大更新就是对App Sore的全新改版,我们一起来看看具体有哪些变化,以及对我们会带来哪些影响. App Store的分类变化 在iOS10以前, ...

  6. SQLSERVER走起微信公众帐号全新改版 全新首页

    SQLSERVER走起微信公众帐号全新改版 全新首页 今天,SQLSERVER走起微信公众帐号增加了首页功能 虽然还是订阅号,不过已经对版面做了比较大的修改,希望各位亲用得放心.用得安心O(∩_∩)O ...

  7. Js new到底发生了什么

    在Js中,我们使用了new关键字来进行实例化 那么在这个new的过程中到底发生了什么? 关于构造函数的return 正常来讲构造函数中是不用写return语句的,因为它会默认返回新创建的对象. 但是, ...

  8. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  9. android 使用Tabhost 发生could not create tab content because could not find view with id 错误

    使用Tabhost的时候经常报:could not create tab content because could not find view with id 错误. 总结一下发生错误的原因,一般的 ...

  10. 解决vs创建或打开C++浏览数据库文件*.sdf时发生错误的问题

    VS2012,  创建或打开C++浏览数据库文件*.sdf时发生错误. IntelliSense 和浏览信息将不能用于C++项目. 请确保已安装 Microsoft SQL Server Compac ...

随机推荐

  1. 微信小程序原生AI运动(动作)检测识别解决方案

    前几年受疫情影响,人员流动受限,反而让"AI运动"概念风靡一时.空前火爆.目前已经在AI运动锻炼.体育教学.线上运动主题活动等场景中,成功得到了应用,并获得了广大互联网用户的认可. ...

  2. 深入解析 WezTerm 的自定义功能:键绑定和鼠标绑定

    WezTerm 是一个高性能的跨平台终端模拟器,它提供了广泛的自定义选项,包括键绑定和鼠标绑定,使得用户可以根据自己的需求优化操作界面.本文将详细介绍几个关键的自定义功能,解释它们的用途,并展示如何配 ...

  3. python 自动下载 moudle

    import sys,re,subprocess import os from subprocess import CalledProcessError new_set = set() ls = se ...

  4. 如何编写一个高效的Java表达式求值程序

    当然,这个标题是有一点夺人眼球,但我确实这么做了(关于是否相信基准测试结果,这是另一个话题). 所以,上周我一直在找一个小型.实用的计算数学表达式的类库.偶然间我在stackoverflow上看到了一 ...

  5. JS之Date时间处理

    初始化当前时间: // 1. 使用构造函数方式 var newDate = new Date() // 2. 使用函数方式 var date = Date() // 返回的是一个Date对象 cons ...

  6. Linux 文件删除空间没有释放问题

    最近阿里云频频告警.磁盘使用率飙升90%以上.遂查看磁盘使用情况 df -h 发现使用率却是很高 之后,通过du -h --max-depth=1 / 查看哪个目录下占用的资源较多并进行删除 后来发现 ...

  7. Asp.net MVC,屏蔽类属性

    将一个类序列化成JSON或XML时,如果某个字段或属性不想被序列化,一般可以使用以下注解: 1.[Newtonsoft.Json.JsonIgnore]特性:使用Newtonsoft.Json序列化时 ...

  8. Less使用备忘录

    定义 Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言,动态样式语言. 使用方式 直接引入less.js文件 好处:能获取客户端的数据,从而进行进一步的 ...

  9. 推荐一款轻量级且强大的 Elasticsearch GUI : elasticvue

    推荐一款轻量级且强大的 Elasticsearch GUI : elasticvue 很多同学都是用过 Elasticsearch 的 GUI 工具 Kibana ,但 Kibana 相对比较重,这篇 ...

  10. 使用pjsip封装自定义软电话sdk

    环境: window10_x64 & vs2022pjsip版本: 2.14.1python版本: 3.9.13 近期有关于windows环境下软电话sdk开发的需求,需要开发动态库给上层应用 ...