Mongoose 笔记系列用于记录学习 Mongoose 的一些内容。
Mongoose 是一个 C/C++ 的网络库。它为 TCP、UDP、HTTP、WebSocket、MQTT 实现了事件驱动的、非阻塞的 API。
项目地址:
https://github.com/cesanta/mongoose
下面通过参考 Mongoose 的 User Guide,学习使用 Mongoose 实现一个最小的 HTTP 服务器,使用树莓派平台进行开发,实现的步骤非常的简单。
首先创建一个工作目录和创建main.c
文件:
pi@raspberrypi:~/Desktop $ mkdir Mongoose_test
pi@raspberrypi:~/Desktop $ cd Mongoose_test/
pi@raspberrypi:~/Desktop/Mongoose_test $ touch main.c
并将项目下载下来, 然后把项目目录中的 mongoose.c
和 mongoose.h
这两个文件拷贝出来放入我们的工作目录中。
pi@raspberrypi:~/Desktop/study $ git clone https://github.com/cesanta/mongoose
正克隆到 'mongoose'...
remote: Enumerating objects: 23694, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 23694 (delta 38), reused 65 (delta 34), pack-reused 23617
接收对象中: 100% (23694/23694), 20.30 MiB | 2.32 MiB/s, 完成.
处理 delta 中: 100% (15043/15043), 完成.
pi@raspberrypi:~/Desktop/study $ cd mongoose/
pi@raspberrypi:~/Desktop/study/mongoose $ ls -l
总用量 324
drwxr-xr-x 3 pi pi 4096 11月 6 17:58 docs
drwxr-xr-x 49 pi pi 4096 11月 6 17:58 examples
-rw-r--r-- 1 pi pi 731 11月 6 17:58 LICENSE
-rw-r--r-- 1 pi pi 6975 11月 6 17:58 Makefile
drwxr-xr-x 2 pi pi 4096 11月 6 17:58 mip
-rw-r--r-- 1 pi pi 242851 11月 6 17:58 mongoose.c
-rw-r--r-- 1 pi pi 44797 11月 6 17:58 mongoose.h
-rw-r--r-- 1 pi pi 4858 11月 6 17:58 README.md
drwxr-xr-x 2 pi pi 4096 11月 6 17:58 src
drwxr-xr-x 5 pi pi 4096 11月 6 17:58 test
工作目录下共3个文件:
pi@raspberrypi:~/Desktop/Mongoose_test $ ls
main.c mongoose.c mongoose.h
接下来在我们的main.c
中添加一段来自Minimal HTTP server的代码,这是一个简单的 HTTP 服务器,同时提供静态和动态内容,代码如下:
#include "mongoose.h"
static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
if (mg_http_match_uri(hm, "/api/hello")) { // On /api/hello requests,
mg_http_reply(c, 200, "", "{%Q:%d}\n", "status", 1); // Send dynamic JSON response
} else { // For all other URIs,
struct mg_http_serve_opts opts = {.root_dir = "."}; // Serve files
mg_http_serve_dir(c, hm, &opts); // From root_dir
}
}
}
int main(int argc, char *argv[]) {
struct mg_mgr mgr;
mg_mgr_init(&mgr); // Init manager
mg_http_listen(&mgr, "http://0.0.0.0:8000", fn, &mgr); // Setup listener
for (;;) mg_mgr_poll(&mgr, 1000); // Event loop
mg_mgr_free(&mgr); // Cleanup
return 0;
}
编译程序:
pi@raspberrypi:~/Desktop/Mongoose_test $ cc -o httpserver main.c mongoose.c
运行程序:
pi@raspberrypi:~/Desktop/Mongoose_test $ ./httpserver
这个时候 HTTP 服务器已经运行起来了。
打开浏览器,输入http://0.0.0.0:8000/
,看到的是我们的工作目录:
可以点开查看文件内容,比如查看main.c
的内容:
接下来查看下动态内容,输入http://0.0.0.0:8000/api/hello
,看到结果如下:
或者也可以使用 curl 来访问我们的 http 服务器:
pi@raspberrypi:~/Desktop $ curl http://0.0.0.0:8000/api/hello
{"status":1}
本文链接:https://blog.csdn.net/u012028275/article/details/127719085