Releases: cfadmin-cn/cfadmin
v1.0 - 一直在不断沉淀, 直到历经4年的版本到来.
v0.6 发布 - 增加gzip支持与协议解析性能优化
feature
-
httpc
与httpd
库增加的gzip
头部支持, 用于优化网络与数据传输效率. -
httpd
库增加注册中文(utf8)路由支持, 用于特殊一些场景. -
httpc
库增加basic
与jwt
方法, 用于构造常用的头部.
update
-
优化对底层库增加预分配机制, 提升效率与可读性.
-
优化大部分网络协议的解析效率, 提升解析效率.
-
httpd
库取消默认超时限制, 如果有需要可以自行调用相关接口增加. -
更新了大部分
cloud
库内相关API, 有兴趣自行查看不再单独介绍.
fixed
-
修复
qiniu
库的认证bug
. -
修复
class
与logging
的引用问题. -
修复
admin
库的cookie异常与admin.view
的一些问题. -
修复
httpd
库上传文件. -
修复了一些错别字.
关于gzip支持
当Web App需要返回大数据集的时候, 这通常不是一个很好的设计. 这在服务端渲染模板的情况下很常见, 框架的设计无法弥补这一缺陷的.
我们知道任何一个模板文件都能轻易达到>1K
的程度, 更有同时还会包含更多一些业务数据. 这种情况通常无法避免, 我们只能思考更好的解决方案.
之前有开发者提出过对gzip
的支持. 但是当时框架正处于功能开发阶段, 无法分出心来对特性、优化、性能进行定制开发. 好在现在这个阶段已经度过.
目前已经对httpd
与httpc
库增加了gzip
的compress
与uncompress
支持. 在某些测试代码中已经证明, 传输字节的消耗至少减少了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
是一种进程间通讯机制, 它在工作起来更像是Pipe
与SocketPair
. 比起基于internet
的socket
连接有有更少的消耗.
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
语言中有效, 并且这也是一种针对性的优化. 我们在大部分场景中测试到一些数据结构的操作会进行rehash
与resize
.
Pre-allocation
的目的是减少频繁resize
/rehash
的问题, 让基础数据结构运行的更加平滑, 最大程度利用数据结构缓存. 这在框架内部使用很频繁.
同时考虑到了开发者对一些对象的调整与扩展优化了数据初始化的大小. 所以在对象建立(例如: Websocket
)的时候, 也会预先分配一定的基础内存.
而底层基础内存结构在使用完毕后, 会被框架清理后进入缓存列表内. 等待下一次使用时候复用即可. 这也是为什么框架无需定制内存分配器也能工作的很好.
就上述调整与优化, 我们在实际测试中提高了5%-10%
的效率.
v0.5.2 发布 - 优化与细节完善
优化
-
优化编译脚本输出, 并且更容易排查编译错误.
-
优化一些错误的拼写, 便于出错时更容易阅读错误信息.
-
优化内置
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
, 它可以帮你将规范的数据dump
到csv
中.
关于一些第三方接口
目前来说paypal
与腾讯位置服务
的SDK已经可以尝试使用了, 这类接口在某些业务场景中会很还用. 欢迎大家对它进行使用.
其它, 例如: qiniu
的接口. 目前无法定位问题所在(因为同样都代码一会好一会坏), 我会继续尝试各种形式的问题定位.
如果实在不行, 这类问题接口将会最终被移除. 毕竟, 一些无法使用并且不稳定的代码不适合存在于项目中.
v0.5.1 增加第三方API库与底层优化
new feature
-
增加七牛云的短信与对象存储
API
. -
增加
httpc
库的DELETE
方法与PUT
方法实现.
update
-
更新
httpc
库的Host
头部, 解决某些情况下被某些http
服务器拒绝的问题. -
更新
Makefile
解决连接tcmalloc
与jemalloc
时的警告. -
更新
httpd
的接口实现, 为某些浏览器的乱码显示增加UTF-8
强制字符集配置. -
更新
picohttp
解析器的Lua C API
实现, 优化解析效率与内存拷贝效率. -
更新
script
文件夹下的一些测试脚本. -
其它一些小幅度更新.
v0.5 版本发布, admin库的优化与漏洞修复
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
修饰符的问题; -
修复浏览器对特殊字符进行编码处理后, 导致的文件查找失败的问题;
-
修复
admin
库sql
的创建语句不规范的问题与登录逻辑未判断用户名是否非法的情况; -
修复
admin
库的session
清空无法直接跳转登录页的问题与退出登录未强制删除token
的冗余问题; -
修复
admin
库的常见xss
隐患与断网情况下无法本地引用jquery
与echarts.js
的问题;
update
- 优化
admin
库的首页布局、登录页加logo
、phone
与email
调用本地程序、长按回车的一些体验问题;
v0.4.3发布 - lua5.4支持与一些细节的优化
优化
-
优化admin库的一些实现代码与SQL语句;
-
优化包括
login
、dashboard
、user
、role
、menu
、header
、profile
的一些布局与显示问题;
修复
-
修复
crypt
在使用频繁情况下的tohex
性能问题; -
修复导入数据后字段描述的
comment
乱码的问题; -
修复在
docker
内运行mysql:8
的连接问题(详情看yaml
文件);
编译
现在提供了clean
与build
脚本用来简化编译难度, 脚本内部注释描述了如何使用与依赖库.
lua 5.4的支持
框架根据lua5.4beta版本API提供了兼容, 可自行编译测试.
在线文档
已经提供了完整的在线文档
v0.4.2 发布 — 增加FFI库并优化了Admin库
新增
-
集成精简后的
FFI
库, 为开发者提供更简单的数据结构编写. -
新增
preapre
与execute
语句, 更加完善的数据库交互方式.
优化
-
优化内置
sys
代码结构. -
优化一些宏进行适配.
-
优化底层
lua
库代码.
修复
-
修复
TCP
的SSL
连接异常的问题. -
修复
httpc
的判断问题. -
修复
admin
库在特殊情况下抛出异常的问题. -
修复
lfs
向后与向前兼容的一些问题. -
修复一些判断不完善的问题.
V0.4.1发布 - 优化代码并增加了内置库
更新
-
增加
lfs
库. -
增加
msgpack
、protobuf
库. -
增加lua5.4的一些兼容配置代码.
-
增加
win
版本使用cmake
编译.
优化
-
优化TCP写入与读取实现, 优化lua层的读取速度
-
优化
build.sh
文件. -
优化一部分
C
文件实现. -
优化日志实现.
修复
-
修复特殊场景下的未初始化都问题.
-
修复
FreeBSD
下的一些小问题. -
修复
makefile
的一些警告. -
修复
win
版本没有加入static
目录的问题.
v0.4发布 - 提供win32平台支持
更新日志
-
修复
httpc
的timeout
字段错误的问题. -
修复
getsockopt
在windows
平台的莫名其妙段错误. -
修复了
MacOSX
默认不使用kqueue
的问题. -
优化
now
函数的实现方法, 使用更加简单的函数实现. -
优化了
core.c
对各种后端选择的优先级判断. -
优化一大部分C代码, 更加清晰的代码流程管理.
-
优化crypt库代码, 增加md5、hmac_md5、sha512、hmac_512等算法.
增加支持平台
分离出一个win32的分支仅用于支持windows
系统原生进行开发与调试, 编译代码支持windows 7或更高版本.
对windows平台的支持
它并非VSC
或MinGW
编译器原生编译, 而是通过msys2
的兼容层cygwin
进行编译. 目前仅对windows 7
或更高版本提供支持.
虽然说引入兼容层能让cf
运行在windows
平台, 但是还有引起一些问题:
-
定时器不精准.
-
dns
库不能根据系统dns进行自动调整(虽然这个问题使用者一般不会感知).
更多详细介绍可以参考这里.
v0.3.1发布, 持续优化与一些bug修复.
更新内容:
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
的启动日志打印提示.