Repository navigation
Releases: 508364/NetLeaf
Release list
V2.4.1
v2.2.2
变更 - 静态库支持:
静态库已不再支持 - 由于扩展库需要动态链接以共享全局状态
如需静态链接,请使用 v2.2.1 或更早版本
所有模块现在仅构建为动态库(DLL/SO)
新增功能 - 扩展库系统:
功能: 支持第三方开发者创建动态扩展库
文件: ,include/netleaf_module.hsrc/netleaf_module.c
特性:
扩展库定义结构nl_extension_info_t
用户定义字段:库名称、库ID、版本、作者、详情(可选,限制50个中文字符)
平台支持字符串: 或 (大小写不限,顺序不限)"Windows,Linux,MacOS""all"
library_value由主库自动分配,用户无需设置
扩展库自动加载:放入 目录, 时自动加载extensions/nl_modules_init()
扩展库注册/注销 API
查询 API:nl_extension_get_value_by_id() / nl_extension_get_id_by_value()
描述长度验证(最多50个中文字符)
示例:examples/plugin_example/
文档:wiki/Extension.md
新增功能 - Web服务器文件热加载 (v2.2.2):
功能: 支持从外部文件加载HTML/Vue/JSON,修改后刷新立即生效
API:
nl_web_add_html_file(server, path, file_path)- 从文件加载HTML
nl_web_add_vue_file(server, path, file_path)- 从文件加载Vue
nl_web_add_json_file(server, path, file_path)- 从文件加载JSON
特性:
每次请求时重新读取文件内容
最大支持10MB文件
自动获取文件绝对路径
返回值:NL_OK/NL_EINVAL/NL_EFILE/NL_ENOMEM
平台: Windows/Linux/macOS(全平台支持)
新增功能 - HTTP重定向 (v2.2.2):
功能: 支持配置临时重定向(302)和永久重定向(301),可在运行时切换
API:
nl_web_add_redirect(server, path, target_url)- 添加重定向
nl_web_set_redirect_type(server, type)- 运行时设置重定向类型(301/302)
nl_web_get_redirect_type(server)- 查询当前重定向类型
特性:
支持内部重定向(同服务器路径)
支持外部重定向(完整URL)
默认302临时重定向,可运行时切换为301永久重定向
返回标准HTTP响应头
平台: Windows/Linux/macOS(全平台支持)
新增功能 - 智能检测 (v2.2.2):
功能: 、 自动识别内容类型nl_web_add_htmlnl_web_add_vuenl_web_add_json
特性:
URL (/) → 自动创建重定向路由http://https://
文件路径 → 自动创建热更新路由
静态内容 → 直接作为内联内容处理
平台: Windows/Linux/macOS(全平台支持)
新增功能 - 运行时动态路由管理 (v2.2.2):
功能: 在服务器运行期间动态添加、移除、查询和更新路由
API:
nl_web_add_route(server, path, content, content_type)- 添加静态内容路由
nl_web_remove_route(server, path)- 移除指定路径的路由
nl_web_get_route_count(server)- 获取当前路由数量
nl_web_list_routes(server, paths, max_paths)- 列出所有路由路径
nl_web_update_route(server, path, content, content_type)- 更新路由内容
特性:
线程安全:使用互斥锁保护路由操作
支持运行时动态修改路由,无需重启服务器
仅支持静态内容类型路由的更新(不支持重定向和文件路由)
平台: Windows/Linux/macOS(全平台支持)
移除的公开API:
布尔值转换API(等)已改为内部静默处理,不再对外暴露nl_bool_from_string
新增功能 - Vue 后端支持 (netleaf_vue):
功能: Vue.js 后端支持和 HTML 生成模块
文件: ,include/netleaf_vue.hsrc/vue/netleaf_vue.c
特性:
Vue CDN 配置(unpkg, cdnjs, jsdelivr, local)
Vue 代码检测和自动导入
HTML 页面生成(带 Vue CDN)
预定义组件生成(系统信息、性能监控)
变量替换支持
平台: Windows/Linux/macOS(全平台支持)
构建流程简化:
build_all.bat / build_all.sh- 直接运行即可构建
自动创建 目录extensions/
版本号更新为 2.2.2
多语言错误消息增强:
支持一个库指定多个同语言文件
支持多库共享翻译文件(需显式声明)
错误码重复注册检测
异步加载支持优化
模块系统优化:
新增 Vue 模块类型NL_MODULE_VUE
新增扩展库管理 API
统一的模块注册和管理
跨平台兼容性改进
Bug 修复:
修复 Linux 构建警告( 隐式声明、未使用参数)strdup
修复 macOS 链接器选项问题(仅 Linux)-fstack-protector-strong
修复插件加载中的 未声明问题va_list
修复跨平台类型兼容性问题( 替换为 )HMODULEnl_plugin_handle_t
修复枚举重复定义问题( → )nl_lazy_status_tnl_module_lazy_status_t
v2.2.1
新增功能 - IPC通讯服务 (netleaf_ipc):
- 功能: 进程间通讯服务,支持 Windows Named Pipe 和 Linux Unix Domain Socket
- 文件:
src/ipc/netleaf_ipc.c- 核心模块src/windows/netleaf_ipc_windows.c- Windows 实现src/linux/netleaf_ipc_linux.c- Linux 实现
- 特性:
- 支持服务端监听和客户端连接
- 跨进程数据传输
- 线程安全设计
- 平台: Windows/Linux(macOS暂不支持)
新增功能 - 同端口链路聚合 (netleaf_linkagg):
- 功能: 单端口监听,将请求转发到多个后端(HTTP/IPC)
- 文件:
src/linkagg/netleaf_linkagg.c- 核心模块src/windows/netleaf_linkagg_windows.c- Windows 实现src/linux/netleaf_linkagg_linux.c- Linux 实现
- 特性:
- 负载均衡策略: Round Robin, Random, Least Connections, Weighted Round Robin
- 支持 HTTP 和 IPC 后端
- 同端口路由聚合
- 平台: Windows/Linux(macOS暂不支持)
统一模块接口:
- 功能: 所有独立模块通过统一接口进行管理
- 文件:
include/netleaf_module.h,src/netleaf_module.c - 特性:
- 模块信息结构
nl_module_info_t - 模块注册/注销 API
- 模块版本、能力、平台支持查询
- 统一的模块管理 API
- 模块信息结构
多语言错误消息 (netleaf_lang):
- 功能: 统一的多语言错误消息翻译库
- 文件:
include/netleaf_lang.h,src/lang/netleaf_lang.c - 特性:
- 无限语言支持(en_us, zh_cn, ja_jp, ko_kr 等)
- 语言代码格式强制
xx_xx(忽略大小写) - 分开注册语言和错误消息
- 自定义语言代码和错误码注册
- 多文件支持(一个库多个语言文件)
- 多库共享文件(需显示声明)
- 错误码重复检测
- 异步加载支持
- 跨平台:Windows / Linux / macOS
- 平台: ✅ Windows / ✅ Linux / ✅ macOS
Bug修复:
- 修复边缘触发 epoll 循环读取问题
- 修复 socket 双重关闭问题
- 修复内存泄漏问题(Levenshtein栈分配、g_global_matcher释放)
- 修复缓冲区溢出问题
- 修复线程安全问题(原子操作、线程安全时间函数)
优化:
- 启用 LTO 链接时优化
- 移除 usleep(100ms) 忙等待,改用 poll
- Bubble sort 替换为 qsort
- 添加安全加固编译标志
- 构建系统优化(OBJECT库避免重复编译)
构建系统更新:
- CMake选项:
BUILD_IPC=ON,BUILD_LINKAGG=ON - ASan支持:
BUILD_ASAN=ON
v2.2.0
新增功能 (v2.2.0)
- ✅ macOS平台支持: 初步支持macOS (kqueue事件机制)
- ✅ Auto-complete机制: 自动补全charset标签和自动引入Vue库(独立可拆卸模块)
- ✅ Auto-route机制: 404时自动查找相近端点并提示(独立可拆卸模块)
- ✅ 自定义错误页面: 支持设置自定义错误页面模板,强制预留变量区域
- ✅ 错误页面联动: 错误页面可与autoroute联动,显示路由建议
查看完整版本历史: CHANGELOG.md
v2.1.6
新增功能 - 编码动态适配:
nl_web_enable_auto_encoding(server, enable)- 启用/禁用自动编码协商nl_web_is_auto_encoding_enabled(server)- 检查是否启用自动编码nl_web_set_fallback_encoding(server, encoding)- 设置回退编码nl_web_get_negotiated_encoding(server)- 获取协商后的编码nl_encoding_convert(input, len, src_enc, dst_enc)- 编码转换函数nl_encoding_detect(input, len)- 自动检测字符串编码nl_encoding_get_system_default()- 获取系统默认编码
编码支持:
- UTF-8
- GBK
- GB2312
- GB18030
- Big5
- ISO-8859-1
- US-ASCII
- UTF-16
全场景支持:
- ✅ 控制台输出
- ✅ Web响应
- ✅ HTML页面
- ✅ Vue组件
- ✅ JSON响应
- ✅ TOML响应
特性:
- 自动解析客户端Accept-Charset请求头
- 运行时自动转码响应内容
- 双向编码转换(任意编码之间互相转换)
- 跨平台支持(Windows/Linux)
- 懒加载机制:功能拉起使用后自动下线,减少内存占用
- 智能优化:仅对非ASCII字符进行转码,减少性能开销
编译器编码修复:
- 默认使用UTF-8编码编译
- 解决中文乱码问题
v2.1.5
v2.1.5
新增功能:
nl_sys_info_get_os_name()- 获取操作系统名称nl_sys_info_get_architecture()- 获取系统架构nl_sys_info_get_cpu_model()- 获取CPU型号nl_sys_info_get_total_ram()- 获取总内存(字节)nl_sys_info_get_runtime_version()- 获取运行库版本nl_sys_info_set_ram_unit(unit)- 设置RAM进制(1000/1024)nl_sys_info_clear_cache()- 清除缓存(用于重新加载)- 懒加载机制: 系统信息仅在首次调用时加载
- 安全增强:
nl_web_stop_by_port()只能停止本库启动的端口
RAM进制配置:
- Linux 默认: 1000进制(符合SI标准)
- Windows 默认: 1024进制(传统二进制)
- 可通过
nl_sys_info_set_ram_unit(NL_RAM_UNIT_DECIMAL)或nl_sys_info_set_ram_unit(NL_RAM_UNIT_BINARY)切换
安全更新:
- 只能停止由本库启动的端口,防止误操作其他进程的端口
懒加载支持:
nl_lazy_enable(enable)- 全局启用/禁用懒加载nl_lazy_enable_module(module)- 启用指定模块的懒加载nl_lazy_disable_module(module)- 禁用指定模块的懒加载nl_lazy_is_enabled(module)- 检查模块是否启用懒加载nl_lazy_clear_all_cache()- 清除所有模块的缓存nl_lazy_preload_module(module)- 预加载指定模块
支持懒加载的模块:
- HTTP (
NL_LAZY_MODULE_HTTP) - WebSocket (
NL_LAZY_MODULE_WEBSOCKET) - TCP (
NL_LAZY_MODULE_TCP) - UDP (
NL_LAZY_MODULE_UDP) - TOML (
NL_LAZY_MODULE_TOML) - JSON (
NL_LAZY_MODULE_JSON) - SysInfo (
NL_LAZY_MODULE_SYSINFO)
模块启停与状态管理:
nl_lazy_stop_module(module)- 停止指定模块并释放资源nl_lazy_get_module_status(module)- 获取模块状态(未加载/加载中/已加载/停止中/已停止)nl_lazy_is_module_loaded(module)- 检查模块是否已加载
多线程优化:
nl_lazy_set_thread_count(count)- 设置线程池大小(1-256)nl_lazy_get_thread_count()- 获取当前线程池大小- 默认线程数: 4
- 支持根据应用场景调整:IO密集型推荐较大线程数,CPU密集型推荐CPU核心数
v2.1.0
- 简化启动:
nl_web_create(port)创建即启动,无需单独调用nl_web_start - 按端口停止:
nl_web_stop_by_port(port)支持通过端口号停止服务器 - 自动清理:
nl_web_set_auto_cleanup(1)程序退出时自动释放所有服务器资源 - 变量硬编码: 服务器端变量替换,用户F12无法看到原始变量名
- 自定义编码: 支持设置响应编码(UTF-8等)
- 完整日志系统: 支持DEBUG/INFO/WARN/ERROR级别
- 自动交叉编译检测: Linux脚本自动检测可用工具链
- Debug模式: 一键启用调试日志
- 异步并发优化: 完整的异步IO支持,优化性能消耗