【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
最近正好有一个需求,需要在arm linux板子上起一个web server。本着轻巧的原则,在github上面找了一下,发现了mongoose这个软件。软件本身很小,就一个h文件,一个c文件,完全可以拿过来处理一下。如果只是配置类的处理,或者是stm32 mcu之类的软件,那么也可以使用这类库。
1、代码的地址
https://github.com/cesanta/mongoose
2、准备main.cpp
本来mongoose.c和mongoose.h是一个库,没有main函数。所以需要自己准备一个main.cpp文件,这样就可以编译起来了,
#include "mongoose.h" // To build, run: cc main.c mongoose.c
// HTTP server event handler function
void ev_handler(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
struct mg_http_serve_opts opts = { .root_dir = "./" };
mg_http_serve_dir(c, hm, &opts);
}
}
int main(void) {
struct mg_mgr mgr; // Declare event manager
mg_mgr_init(&mgr); // Initialise event manager
mg_http_listen(&mgr, "http://0.0.0.0:8000", ev_handler, NULL); // Setup listener
for (;;) { // Run an infinite event loop
mg_mgr_poll(&mgr, 1000);
}
return 0;
}
3、编译方法
只需要mongoose.cpp和main.cpp,这样就可以编译起来了,
g++ main.cpp mongoose.c -g -o main
4、可执行文件执行
看到了main程序被生成之后,下面就可以开始执行了,如果输入./main,就可以看到这样的log内容,
feixiaoxing@raspberrypi:~/Desktop/mongoose/mongoose-master $ ./main
5a5a09 3 mongoose.c:4381: MG_IO_SIZE: 16384, TLS: none
5a5a09 3 mongoose.c:4298: 1 4 http://0.0.0.0:8000
5、测试web server
看到web server之后,如果pc和板子是用网线直连的话,就可以直接打开浏览器测试。比如,这样输入http地址,http://192.168.0.97:8000/

6、复杂的测试用例
**如果想做一点复杂的功能,又不想自己开发,那么可以直接参考tutorials下面的demo案例。**除了mongoose.c之外,还会借用src/下面一部分代码,具体case也会自己写代码,这样构成一个完整的功能,比如tutorials/webui/webui-rest应用。

tutorials/http/file-upload-html-form下面的文件上传窗口,是这样的,

7、后续的内容
至此mongoose已经用起来了,后面不管是做web,还是添加api接口,都是比较方便的。