这个项目能做什么
Keel(Kernel Event Engine, Lightweight)是一个用 C 编写的可移植异步网络基础层。其核心思想是一个模型中立的传输层:由就绪或完成执行模型驱动的语义化流、监听器和数据报抽象,位于一个不假设操作系统的套接字接缝之上。
架构沿三个正交轴组织:
- 事件轴:就绪后端(epoll、kqueue、WSAPoll、poll)注册关注事件并在 EAGAIN 时重试;完成后端(io_uring、IOCP)提交自有操作并回收完成事件。两者都位于一个很小的事件循环接口之后,各自保留其原生语义,而不是模拟对方。
- 套接字轴:一个可插拔的提供者 vtable(KlSocketProvider),内置 POSIX 和 Winsock,并附带 lwIP(BSD 套接字层和原始 NO_SYS 回调栈)以及独立 UEFI EFI_TCP4/UDP4 提供者的集成。能力标志用于控制原生 fd、writev 和 sendfile 等特性。
- 协议轴:HTTP/1.1、HTTP/2、WebSocket、SSE 和异步 DNS 解析器是该基础层的消费者,而不是其目的。协议代码只应通过连接/流和事件抽象,绝不直接访问平台网络头文件或事件引擎;该项目描述了默认拒绝的结构化构建门禁,一旦违反这种分离就会失败。
协议和服务器特性包括:可插拔 HTTP 解析器(内置 llhttp)、通过 vtable 可插拔 TLS、可插拔正文读取器、带短路能力的按路由中间件、内置 CORS 中间件、RFC 2046 multipart form-data、三种响应模式(缓冲 writev、sendfile、分块流式)、无分配的路由参数捕获、带自动 408 响应的连接超时、访问日志、可挂起和恢复连接的异步服务器处理器、同步和异步 HTTP 客户端、带管道唤醒的线程池、通用 fd 监视器、SSE 帧封装、响应压缩(miniz gzip)和客户端解压缩、keep-alive 连接池、重定向跟随、HTTP 代理和 CONNECT 隧道、背压写缓冲、定时器调度,以及 sqlite3 风格错误码。
网络附加功能包括:带对端凭据的 UNIX 域套接字服务器、对端安全标签、mTLS 客户端证书检查、由受信任 CIDR 控制的 PROXY 协议支持、通过继承 fd 的套接字激活(systemd LISTEN_FDS)、基于 IOCP 的 Windows 命名管道、稳定的固定槽位 UDP 数据报 API(支持批处理)、多播/广播、ECN/TOS 标记和卸载支持、可插拔异步 DNS 解析器(内置双栈实现),以及 Happy Eyeballs 客户端连接竞速。
构建选项涵盖 epoll、kqueue、io_uring、poll 和 IOCP 后端、Cosmopolitan C、原生 MSVC,以及用于优化标志的嵌入方钩子。README 声称单线程可达 111K req/s,并在两种执行模型下通过 ASan/UBSan 测试,且只有一个内置依赖(llhttp)。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。