特點:
- 佔用記憶體低 (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;}
來自:開源中國社群
相關閱讀
評論(1)