• C++-Mongoose(1)-http-server



     Mongoose is a network library for C/C++. It implements event-driven non-blocking APIs for TCP, UDP, HTTP, WebSocket, MQTT. 
    mongoose很小巧,只有两个文件mongoose.h/cpp,拿来就可以用.

    下载地址:

    https://github.com/cesanta/mongoose

    1.simplest http server
    2.restful server
    3.simplest https server
    4.multi-thread server
     

    1.simplest http server
     

    Mongoose有两个基本的结构体:

    • struct mg_mgr 事件管理器,管理所有激活的连接

    • struct mg_connection 单个连接描述结构

    下面的示例代码创建了一个web server,事件处理函数fn中实现了三个简单的能力,一个显示根目录文件列表、一个显示hello Mongoose的html页面、一个简单的post请求计算两个数之和。
     

    1.1代码
     

    1. static void fn(struct mg_connection* c, int ev, void* ev_data, void* fn_data)
    2. {
    3. //MG_EV_HTTP_MSG表示为http请求
    4. if (ev == MG_EV_HTTP_MSG)
    5. {
    6. struct mg_http_message* hm = (struct mg_http_message*)ev_data;
    7. //1.get请求示例,显示Hello Mongoose页面
    8. if (mg_http_match_uri(hm, "/hello"))
    9. {
    10. mg_http_reply(c, 200, "", "mongoose demo

      Hello Mongoose!

      \n"
      );
    11. }
    12. //2.post请求示例,请求体json示例{"a":10,"b":20},计算a+b的值
    13. else if (mg_http_match_uri(hm, "/api/sum"))
    14. {
    15. double a = 0;
    16. double b = 0;
    17. mg_json_get_num(hm->body, "$.a", &a);
    18. mg_json_get_num(hm->body, "$.b", &b);
    19. double sum = a + b;
    20. mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{\"result\":%lf}", sum);
    21. }
    22. //3.显示当前目录文件列表
    23. else
    24. {
    25. struct mg_http_serve_opts opts = { 0 };
    26. opts.root_dir = ".";
    27. mg_http_serve_dir(c, hm, &opts);
    28. }
    29. }
    30. }
    31. void main()
    32. {
    33. //1.创建事件管理器
    34. struct mg_mgr mgr;
    35. //设置日志级别为DEBUG,如果不做设置,默认情况下运行程序控制台不打印任何请求响应消息
    36. mg_log_set(MG_LL_DEBUG);
    37. //2.初始化事件管理器
    38. mg_mgr_init(&mgr);
    39. //3.创建http监听
    40. mg_http_listen(&mgr, "http://127.0.0.1:8080", fn, NULL);
    41. //4.开启事件循环
    42. for (;;)
    43. {
    44. // 1000ms为超时时长
    45. mg_mgr_poll(&mgr, 1000);
    46. }
    47. mg_mgr_free(&mgr);
    48. }


    1.2测试

     启动httpserver 程序
    1.2.1  浏览器访问:http://127.0.0.1:8080:
             将显示exe程序根目录文件列表
    1.2.2  浏览器访问: http://127.0.0.1:8080/hello:
              将显示Hello Mongoose
    1.2.3 使用postman: 发送post请求:
              http://127.0.0.1:8080/api/sum,
              请求json参数为{"a": 100, "b": 2},

  • 相关阅读:
    使用SpringBatch读取csv文件
    虹科 | 解决方案 | 新能源车EV测试解决方案
    MySQL深分页
    WEB API 接口签名sign验证入门与实战
    【数据结构与算法】骑士周游算法/马踏棋盘算法的介绍和程序实现
    ElasticSearch - DSL查询文档语法,以及深度分页问题、解决方案
    Docker Compose学习笔记
    python面相对象基础语法
    开发Chrome 插件赚钱的7个主要方式(Chrome Extension )
    【Unity3D】顶点和片段着色器
  • 原文地址:https://blog.csdn.net/aggie4628/article/details/133697121