Mongoose Web Server是一款易於使用的Web服務器,它能夠嵌入到其它應用程序中,爲其提供Web接口。git
主要特寫:github
跨平臺,支持 Windows、OS X 和 Linuxweb
支持 CGI, SSL, SSI, Digest (MD5) 認證,WebSocket 和 WebDAV服務器
支持斷點續傳和 URL 重寫websocket
基於 IP 的 ACL,支持 Windows 服務,支持 GET, POST, HEAD, PUT, DELETE 方法app
Excluding files from serving by URI patternsocket
下載速度限制,基於客戶端子網和 URI 模式mongoose
體積小,可執行文件只有 40k 左右post
可嵌入式,提供簡單的 API (mongoose.h). 只需一個源碼文件 mongoose.cui
嵌入式實例: hello.c, post.c, upload.c, websocket.c
提供 Python 和 C# 版本
採用 MIT 受權協議
doc: https://docs.cesanta.com/mongoose/dev/
code : https://github.com/cesanta/mongoose
一個簡單的http服務器:
// Copyright (c) 2015 Cesanta Software Limited // All rights reserved #include "mongoose.h" static const char *s_http_port = "8000"; static struct mg_serve_http_opts s_http_server_opts; static void ev_handler(struct mg_connection *nc, int ev, void *p) { if (ev == MG_EV_HTTP_REQUEST) { mg_serve_http(nc, (struct http_message *) p, s_http_server_opts); } } int main(void) { struct mg_mgr mgr; struct mg_connection *nc; mg_mgr_init(&mgr, NULL); printf("Starting web server on port %s\n", s_http_port); nc = mg_bind(&mgr, s_http_port, ev_handler); if (nc == NULL) { printf("Failed to create listener\n"); return 1; } // Set up HTTP server parameters mg_set_protocol_http_websocket(nc); s_http_server_opts.document_root = "."; // Serve current directory s_http_server_opts.enable_directory_listing = "yes"; for (;;) { mg_mgr_poll(&mgr, 1000); } mg_mgr_free(&mgr); return 0; }
Copy mongoose.c and mongoose.h to your build tree
Write code that uses Mongoose API, e.g. in my_app.c
Compile application: $ cc simplest_web_server.c mongoose.c -o simplest_web_server.exe