【Mongoose笔记】入门使用

【Mongoose笔记】入门使用

简介

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.cmongoose.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 116 17:58 docs
drwxr-xr-x 49 pi pi   4096 116 17:58 examples
-rw-r--r--  1 pi pi    731 116 17:58 LICENSE
-rw-r--r--  1 pi pi   6975 116 17:58 Makefile
drwxr-xr-x  2 pi pi   4096 116 17:58 mip
-rw-r--r--  1 pi pi 242851 116 17:58 mongoose.c
-rw-r--r--  1 pi pi  44797 116 17:58 mongoose.h
-rw-r--r--  1 pi pi   4858 116 17:58 README.md
drwxr-xr-x  2 pi pi   4096 116 17:58 src
drwxr-xr-x  5 pi pi   4096 116 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的内容:

main

接下来查看下动态内容,输入http://0.0.0.0:8000/api/hello,看到结果如下:

动态资源

或者也可以使用 curl 来访问我们的 http 服务器:

pi@raspberrypi:~/Desktop $ curl http://0.0.0.0:8000/api/hello
{"status":1}

【参考资料】

user-guide

Minimal HTTP server


本文链接:https://blog.csdn.net/u012028275/article/details/127719085

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值