lwan:性能卓越的c web 框架
Lwan 是一个高性能和可伸缩的 Web 服务器软件,支持 glibc/Linux 平台。
LWAN 的意思:
L = light
W = weight
A = asynchronous
N = multi-threaded event-based web server
Lwan 开发了将近 3 年时间,目前还是个人研究的成果。主要是为了构建一个坚固、轻量级高性能的 Web 服务器。
在各框架的跑分比赛中表现最棒 https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=json
特点:
占用内存低 (1万个空闲连接只占用 ~500KiB)
最小化的内存分配和拷贝
最小化的系统调用
精确的 HTTP 请求解析
使用最高效的方法来处理文件服务
大于 16k 的文件不需要进行核心和用户层的拷贝
更小的文件使用内存映射缓冲向量 I/O 发送
处理压缩小文件时考虑Header 开销
大多数无等待、多线程设计
核心代码只有 7200 行左右
性能:
在一台使用 i7 处理器的笔记本上可以达到每秒 32 万无磁盘访问的 HTTP 请求。当访问磁盘,测试文件在 16Kb 时可达到每秒 29 万个请求;而更大的文件可到每秒 18.5 万请求。以上测试使用 keep-alive 连接,如果不使用 keep-alive 这个数字可能降低 6 倍左右。
示例代码:
#include "lwan.h"
static lwan_http_status_t
hello_world(lwan_request_t *request,
lwan_response_t *response, void *data)
{
static const char message[] = "Hello, World!";
response->mime_type = "text/plain";
strbuf_set_static(response->buffer, message, sizeof(message) - 1);
return HTTP_OK;
}
int
main(void)
{
const lwan_url_map_t default_map[] = {
{ .prefix = "/", .handler = hello_world },
{ .prefix = NULL }
};
lwan_t l;
lwan_init(&l);
lwan_set_url_map(&l, default_map);
lwan_main_loop(&l);
lwan_shutdown(&l);
return 0;
}
更有趣的是他还支持lua 脚本,如果你不想写那么长的c,可以写简短的lua:
function handle_get_hello(req)
local name = req:query_param[[name]]
if name then
req:set_response("Hello, " .. name .. "!")
else
req:set_response("Hello, World!")
end
end
lwan 官方主页 http://lwan.ws/
lwan 项目地址 https://github.com/lpereira/lwan
附:在寻找lwan 的资料时发现另外一个c框架 http://gwan.com/ 也很快,但是闭源。
0
See Also
Nearby
- 上一篇 › 推荐两个与微信有关go sdk
- 下一篇 › net/http + mux 简单示例