Core Framework Versions Save

A lua web network framework.

v1.0

1 year ago

特性

  • 同时支持多进程与单进程模型, 增加进程之间的消息交互特性.
  • 增加MSSQLPGSQL善数据库驱动与完善相关特性功能(预编译).
  • 完善Cache扩展为redisssdb两种驱动支持, 可由开发者自行选择.
  • 增加更多的加密算法与优化base64hex等基础库效率.
  • 优化Timer库的实现, 显著降低运行期间的内存占用.
  • 优化全局class实现, 提升整体代码可读性.
  • 其它一些细节改进与优化.

贡献

  • smtp库发送邮件的特性优化、构建脚本的依赖下载自动加速. (@Nuctori )
  • httpd库的路由方法补充. (@Nuctori )

v0.6

4 years ago

feature

  • httpchttpd库增加的gzip头部支持, 用于优化网络与数据传输效率.

  • httpd库增加注册中文(utf8)路由支持, 用于特殊一些场景.

  • httpc库增加basicjwt方法, 用于构造常用的头部.

update

  • 优化对底层库增加预分配机制, 提升效率与可读性.

  • 优化大部分网络协议的解析效率, 提升解析效率.

  • httpd库取消默认超时限制, 如果有需要可以自行调用相关接口增加.

  • 更新了大部分cloud库内相关API, 有兴趣自行查看不再单独介绍.

fixed

  • 修复qiniu库的认证bug.

  • 修复classlogging的引用问题.

  • 修复admin库的cookie异常与admin.view的一些问题.

  • 修复httpd库上传文件.

  • 修复了一些错别字.

关于gzip支持

当Web App需要返回大数据集的时候, 这通常不是一个很好的设计. 这在服务端渲染模板的情况下很常见, 框架的设计无法弥补这一缺陷的.

我们知道任何一个模板文件都能轻易达到>1K的程度, 更有同时还会包含更多一些业务数据. 这种情况通常无法避免, 我们只能思考更好的解决方案.

之前有开发者提出过对gzip的支持. 但是当时框架正处于功能开发阶段, 无法分出心来对特性、优化、性能进行定制开发. 好在现在这个阶段已经度过.

目前已经对httpdhttpc库增加了gzipcompressuncompress支持. 在某些测试代码中已经证明, 传输字节的消耗至少减少了50%-80%.

httpd库中我们提供了httpd:enable_gzip方法. 在客户端支持压缩的情况下, 我们会对相关路由的返回值进行压缩. 开发者无需关心数据格式.

httpc中是会增加Accept-Encoding: gzip头部请求压缩. 这在用户与开发者角度是不会感知的, 通常内部已经自动识别完成转换.

关于httpd的socket请求超时限制

从大部分测试中发现, http客户端都已经支持Connection: keep-alive. 框架默认增加连接超时机制对开发者来说不够友好.

相信大部分Web开发者都会为Web App框架提供的负载均衡器, 同时负载均衡器会对大部分后端Web App提供的socket连接提供连接池机制.

大部分负载均衡器都能完成连接超时功能, 所以框架的超时机制反而对连接池的建立与回收有稳定性上的隐患. 并且隐患通常开发者很难知晓与排查.

而Web框架运行在一个对连接复用性需求比较高的场景下, 所以将默认设置为无超时限制. 这样能让框架隐藏在负载均衡器后的时候运行的更加稳定.

当然! 如果开发者对此有异议, 并且不希望cfadmin运行在负载均衡器后面并且要提供超时机制. 从当前版本开始, 只需要在启动的时候设置超时时间即可.

关于 Unix Domain Socket

众所周知! 市面上绝大部分Web开发框架都提供了unix sock机制. 但是对其应用场景与实际效果却了解甚少. 这是因为一些开发者很少接触到服务器部署.

我们通常只可能部署一台负载均衡器与后端多个Web App应用程序进行通信达到负载均衡的目的. 但是这也许满足不了一些特殊的开发者, 他们的环境有特殊的要求.

当负载均衡算法已经不是问题的时候, 减少内部连接消耗与效率则变成了我们关注的重点. 有限的连接池与端口范围成为制约我们的瓶颈. 我们需要更好的解决办法.

Unix Domain Socket 是一种进程间通讯机制, 它在工作起来更像是PipeSocketPair. 比起基于internetsocket连接有有更少的消耗.

Unix Domain Socket 两端通信没有端口的概念, 因此也就没有端口范围的限制. 通常您只会在某些代理、负载均衡器中看到它的应用. 例如: Nginx.

我们完全可以假设单台服务器硬件配置足够高的情况下, 运行N个Web App实例进程. 让负载均衡器通过Unix Domain Socket与其进行通信.

例如: 在一个16核心64G内存的服务器上启动10个cfadmin进程. 通过让负载均衡器占用4~6核心与10~20G内存来维护上万的连接是轻而易举的.

每个cfadmin进程对CPU与内存的利用率都非常高. 当其他Web框架需要占用G单位大小的内存时, cfadmin可能只需要1/10的内存.

有理由预计当每个cfadmin需要占用4G以上内存的时候, 您可能才需要考虑单台服务器设计是否需要进行横向扩展.

关于底层数组与哈希表预分配机制

Pre-allocation仅在Lua语言中有效, 并且这也是一种针对性的优化. 我们在大部分场景中测试到一些数据结构的操作会进行rehashresize.

Pre-allocation的目的是减少频繁resize/rehash的问题, 让基础数据结构运行的更加平滑, 最大程度利用数据结构缓存. 这在框架内部使用很频繁.

同时考虑到了开发者对一些对象的调整与扩展优化了数据初始化的大小. 所以在对象建立(例如: Websocket)的时候, 也会预先分配一定的基础内存.

而底层基础内存结构在使用完毕后, 会被框架清理后进入缓存列表内. 等待下一次使用时候复用即可. 这也是为什么框架无需定制内存分配器也能工作的很好.

就上述调整与优化, 我们在实际测试中提高了5%-10%的效率.

v0.5.2

4 years ago

优化

  • 优化编译脚本输出, 并且更容易排查编译错误.

  • 优化一些错误的拼写, 便于出错时更容易阅读错误信息.

  • 优化内置dns库的一些实现流程, 优化dns cache生成与查询速度.

  • 优化一些测试代码, 完善测试流程与增加测试覆盖率.

新增

  • cfadmin可执行文件新增命令行-e参数, 可以用来指定入口文件.

  • csv库新增writefile方法, 根据指定规则生成csv文件.

  • cloud库新增paypal支付SDK实现与腾讯位置服务SDK.

  • 新增快速上传文件示例, 具体查看script/test_upload.lua.

  • 项目首页增加更为详细的安装、编译流程图.

关于增加命令行参数

cf框架一直以来都没有考虑改写入口文件的支持, 这对熟悉文档的用户来说是一件好事(无歧义性).

但是在多项目部署与测试的时候就会出现一系列问题, 一些开发者也经常会遇到这样的需求(包括作者).

直到某个匿名小伙伴私信说项目部署/测试都很麻烦的时候, 作为作者的我才意识到这方面限制了它.

现在, 使用者可以用./cfadmin -d -e script/XXX.lua来指定入口文件. 参数-d-e的顺序并不重要且不会影响.

关于csv文件

lua读/写csv文件并不难(甚至可以说很简单), 但是框架在之前只实现了读取.

这次我们增加接口writefile, 它可以帮你将规范的数据dumpcsv中.

关于一些第三方接口

目前来说paypal腾讯位置服务的SDK已经可以尝试使用了, 这类接口在某些业务场景中会很还用. 欢迎大家对它进行使用.

其它, 例如: qiniu的接口. 目前无法定位问题所在(因为同样都代码一会好一会坏), 我会继续尝试各种形式的问题定位.

如果实在不行, 这类问题接口将会最终被移除. 毕竟, 一些无法使用并且不稳定的代码不适合存在于项目中.

v0.5.1

4 years ago

new feature

  • 增加七牛云的短信与对象存储API.

  • 增加httpc库的DELETE方法与PUT方法实现.

update

  • 更新httpc库的Host头部, 解决某些情况下被某些http服务器拒绝的问题.

  • 更新Makefile解决连接tcmallocjemalloc时的警告.

  • 更新httpd的接口实现, 为某些浏览器的乱码显示增加UTF-8强制字符集配置.

  • 更新picohttp解析器的Lua C API实现, 优化解析效率与内存拷贝效率.

  • 更新script文件夹下的一些测试脚本.

  • 其它一些小幅度更新.

v0.5

4 years ago

new feature

  • 新增admin库的一些特殊处理方法;

  • 新增webhook库并集成了dingtalk机器人API相关接口与测试文件, 主要适用于国内一些特殊开发场景;

  • 新增qrcode.js/echarts.js等库到static目录下, 可以自行决定是否保留(内部无依赖);

  • 新增httpd库都内置MIME集, 适用于一些特殊场景;

  • 新增跨平台的sendfile方法支持, 提升httpd库的静态资源发送效率;

  • 新增httpc库的get/post方法对args/body强制转义.

bug fix

  • 修复httpc.json的引用错误的问题;

  • 修复一个命名错误的歧义性问题与upvalue未加local修饰符的问题;

  • 修复浏览器对特殊字符进行编码处理后, 导致的文件查找失败的问题;

  • 修复adminsql的创建语句不规范的问题与登录逻辑未判断用户名是否非法的情况;

  • 修复admin库的session清空无法直接跳转登录页的问题与退出登录未强制删除token的冗余问题;

  • 修复admin库的常见xss隐患与断网情况下无法本地引用jqueryecharts.js的问题;

update

  • 优化admin库的首页布局、登录页加logophoneemail调用本地程序、长按回车的一些体验问题;

v0.4.3

4 years ago

优化

  • 优化admin库的一些实现代码与SQL语句;

  • 优化包括logindashboarduserrolemenuheaderprofile的一些布局与显示问题;

修复

  • 修复crypt在使用频繁情况下的tohex性能问题;

  • 修复导入数据后字段描述的comment乱码的问题;

  • 修复在docker内运行mysql:8的连接问题(详情看yaml文件);

编译

现在提供了cleanbuild脚本用来简化编译难度, 脚本内部注释描述了如何使用与依赖库.

lua 5.4的支持

框架根据lua5.4beta版本API提供了兼容, 可自行编译测试.

在线文档

已经提供了完整的在线文档

v0.4.2

4 years ago

新增

  • 集成精简后的FFI库, 为开发者提供更简单的数据结构编写.

  • 新增preapreexecute语句, 更加完善的数据库交互方式.

优化

  • 优化内置sys代码结构.

  • 优化一些宏进行适配.

  • 优化底层lua库代码.

修复

  • 修复TCPSSL连接异常的问题.

  • 修复httpc的判断问题.

  • 修复admin库在特殊情况下抛出异常的问题.

  • 修复lfs向后与向前兼容的一些问题.

  • 修复一些判断不完善的问题.

v0.4.1

4 years ago

更新

  • 增加lfs库.

  • 增加msgpackprotobuf库.

  • 增加lua5.4的一些兼容配置代码.

  • 增加win版本使用cmake编译.

优化

  • 优化TCP写入与读取实现, 优化lua层的读取速度

  • 优化build.sh文件.

  • 优化一部分C文件实现.

  • 优化日志实现.

修复

  • 修复特殊场景下的未初始化都问题.

  • 修复FreeBSD下的一些小问题.

  • 修复makefile的一些警告.

  • 修复win版本没有加入static目录的问题.

v0.4

4 years ago

更新日志

  • 修复httpctimeout字段错误的问题.

  • 修复getsockoptwindows平台的莫名其妙段错误.

  • 修复了MacOSX默认不使用kqueue的问题.

  • 优化now函数的实现方法, 使用更加简单的函数实现.

  • 优化了core.c对各种后端选择的优先级判断.

  • 优化一大部分C代码, 更加清晰的代码流程管理.

  • 优化crypt库代码, 增加md5、hmac_md5、sha512、hmac_512等算法.

增加支持平台

分离出一个win32的分支仅用于支持windows系统原生进行开发与调试, 编译代码支持windows 7或更高版本.

对windows平台的支持

它并非VSCMinGW编译器原生编译, 而是通过msys2的兼容层cygwin进行编译. 目前仅对windows 7或更高版本提供支持.

虽然说引入兼容层能让cf运行在windows平台, 但是还有引起一些问题:

  • 定时器不精准.

  • dns库不能根据系统dns进行自动调整(虽然这个问题使用者一般不会感知).

更多详细介绍可以参考这里.

v0.3.1

4 years ago

更新内容:

optimization

  • 优化代码编译流程, 增加rpath运行时查找路径.

  • 优化makefile, 更直观的编译流程.

  • 优化异步日志打印频率.

  • 优化HTTP.lua协议文件.

  • 优化mail库发送流程, 分离协议文件与应用库文件.

  • 优化websocket关闭与发送流程, 减少内存占用.

fix

  • 修复httpc.multi_request返回false的问题.

  • 修复conf.d不存在的问题.

  • 修复静态文件PATH判断的问题.

  • 修复crypt库的被隐藏的错误.

  • 修复logging库的毫秒显示问题.

add and upadte

  • 增加adimin库的get_files方法判断是否有上传文件.

  • 增加build.sh文件用来展示如何快速编译依赖库.

  • 增加大部分crypt库的hex参数用来转换16位可读、可打印字符, 增加了test_crypt.lua示例文件.

  • 增加csv库用来读取解析csv文件, 使用方法查看test_csv.lua.

  • 更新了dockerfile文件.

  • 增加了httpd的启动日志打印提示.