高性能 Web 服务器 Lwan

未知
C/C++
Linux
2014-10-13
红薯

Lwan 是一个高性能和可伸缩的 Web 服务器软件,支持 glibc/Linux 平台。

Lwan 开发了将近 3 年时间,目前还是个人研究的成果。主要是为了构建一个坚固、轻量级高性能的 Web 服务器。

特点:

  • 占用内存低 (1万个空闲连接只占用 ~500KiB)

  • 最小化的内存分配和拷贝

  • 最小化的系统调用

  • 精确的 HTTP 请求解析

  • 使用最高效的方法来处理文件服务

    • 大于 16k 的文件不需要进行核心和用户层的拷贝

    • 更小的文件使用内存映射缓冲向量 I/O 发送

    • 处理压缩小文件时考虑Header 开销

  • 大多数无等待、多线程设计

  • 核心代码只有 7200 行左右

性能:

在一台使用 i7 处理器的笔记本上可以达到每秒 32 万无磁盘访问的 HTTP 请求。当访问磁盘,测试文件在 16Kb 时可达到每秒 29 万个请求;而更大的文件可到每秒 18.5 万请求。以上测试使用 keep-alive 连接,如果不使用 keep-alive 这个数字可能降低 6 倍左右。

下图是不同并发连接数测试的每秒请求数:

其中绿线是使用如下示例代码的 Hello world 扩展应用,棕色线是 100 字节的文件。

此外 Lwan 也提供 API 扩展,示例代码:

#include "lwan.h"static lwan_http_status_thello_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;}intmain(void){
    const lwan_url_map_t default_map[] = {
        { .prefix = "/", .callback = 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;}
加载中

评论(8)

深蓝苹果
深蓝苹果
最好给出更有说服力的文档和数据 Lwan
店长强力推荐
店长强力推荐
很棒的工具。 Lwan
店长强力推荐
店长强力推荐
需要脚本支持才会更多人使用吧 :) Lwan
t
tntest
很nb的样子, 问题就来了, _______ Lwan
dadait
dadait
好像很不错的样子。 Lwan
502BadGateway
502BadGateway
噱头 Lwan
Tom-Lin
Tom-Lin
与 nginx 比较如何? Lwan

暂无资讯

6
回答
个人观点:分布式时代并不关心单机的性能,而关注整个系统体系的性能。

个人观点:分布式时代并不关心单机的性能,而关注整个系统体系的性能。简而言之,单机软件跑再快也没用,而集群相比永远差了数量级。建议作者更关注单机的业务可持续...

2014/10/19 21:35

没有更多内容

加载失败,请刷新页面

没有更多内容

OSChina 技术周刊第五期 —— 2014 非常好用的开源 Android 测试工具

每周技术抢先看,总有你想要的! 移动开发 【软件】Android 测试框架 RoboSpock 前端开发 【翻译】7 个 Bootstrap 在线编辑器用于快速开发响应式网站 【翻译】Browserify vs. Webpack 【软件...

2014/10/19 21:32
81
1

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部