Mongoose 是一个非常小巧易用的网络库。
它为 TCP、UDP、HTTP、WebSocket、MQTT 实现了基于事件驱动的非阻塞 API,非常适合在嵌入式系统上使用。
官网链接:
Github 链接:
https://github.com/cesanta/mongoose
1、小巧易用,全部代码就一个 mongoose.c 和一个 mongoose.h 文件。
2、依赖少,就是纯粹的 Socket 编程,没有引用任何第三方库。
3、稳定可靠,Github 上有 8.1K 的 Star,且大量知名企业都基于 Mongoose 推出了商业产品。
4、丰富的文档和示例。
Mongoose 怎么用?
Mongoose 解决了广泛的业务需求,如在设备上实现 Web UI 界面、RESTful API 服务、遥测数据交换、产品远程控制、远程软件更新、远程监控等。
下面是官方提供的示例:

示例1:实现 HTTP server
// main.c
#include "mongoose.h"
static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
// Serve local dir
struct mg_http_serve_opts opts = {.root_dir = "."};
if (ev == MG_EV_HTTP_MSG) mg_http_serve_dir(c, ev_data, &opts);
}
int main(int argc, char *argv[]) {
struct mg_mgr mgr;
mg_mgr_init(&mgr);
// Setup listener
mg_http_listen(&mgr, "http://localhost:8000", fn, &mgr);
// Event loop
for (;;) mg_mgr_poll(&mgr, 1000);
mg_mgr_free(&mgr);
return 0;
}
将上面的 main.c 和 mongoose.c 一起编译,就可以得到一个最简单的 HTTP server了,它会列举 server 当前所在目录下的文件列表。
对于源码,mg_http_listen() 负责建立 http server,然后 mg_mgr_poll() 负责等待事件的发生。
示例2:swupdate
swupdate 是一个关于 嵌入式 Linux OTA 的开源项目。它集成了 Mongoose, 以实现通过 web 来上传更新包的功能。
具体的代码实现请自行阅读:
https://github.com/sbabic/swupdate/blob/master/mongoose/mongoose_interface.c

Comments | NOTHING