博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lwan —— 每秒处理32万请求的高性能Web服务器
阅读量:6120 次
发布时间:2019-06-21

本文共 1119 字,大约阅读时间需要 3 分钟。

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 倍左右。

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

image

其中绿线是使用如下示例代码的 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;}

文章转载自 开源中国社区 [

你可能感兴趣的文章
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>