c++利用mongoose搭建restful风格的webservice

c++利用mongoose搭建restful风格的webservice

0、mongoose介绍

  • 跨平台:可在linux/unix macos QNX eCos Windows Android Iphone FreeRtos上运行
  • 支持的硬件平台: TI CC3200, TI MSP432, NRF52, STM32, PIC32, ESP8266, ESP32 and more
  • 内置协议栈:
    • plain TCP, plain UDP, SSL/TLS (over TCP, one-way or two-way)
    • HTTP client, HTTP server
    • WebSocket client, WebSocket server
    • MQTT client, MQTT broker
    • CoAP client, CoAP server
    • DNS client, DNS server, async DNS resolver
  • 单线程,异步,非阻塞核心与简单的基于事件的API
  • 原生支持PicoTCP的嵌入式tcp/ip协议栈,支持LWIP嵌入式tcp/ip协议栈
  • 在运行和占用很小的内存,源代码符合ISO C 和ISO c++
  • 同时仅仅复制mongoose.c mongoose.h到你的工程即可完成整合

mongoose github地址

1、关键词

mg_mgr(事件管理器,保存所有的活动链接)

struct mg_mgr {
  struct mg_connection *active_connections;
#if MG_ENABLE_HEXDUMP
  const char *hexdump_file; /* Debug hexdump file path */
#endif
#if MG_ENABLE_BROADCAST
  sock_t ctl[2]; /* Socketpair for mg_broadcast() */
#endif
  void *user_data; /* User data */
  int num_ifaces;
  int num_calls;
  struct mg_iface **ifaces; /* network interfaces */
  const char *nameserver;   /* DNS server to use */
};

mg_connection()

struct mg_connection {
  struct mg_connection *next, *prev; /* mg_mgr::active_connections linkage */
  struct mg_connection *listener;    /* Set only for accept()-ed connections */
  struct mg_mgr *mgr;                /* Pointer to containing manager */

  sock_t sock; /* Socket to the remote peer */
  int err;
  union socket_address sa; /* Remote peer address */
  size_t recv_mbuf_limit;  /* Max size of recv buffer */
  struct mbuf recv_mbuf;   /* Received data */
  struct mbuf send_mbuf;   /* Data scheduled for sending */
  ......

2、基本使用

#include "mongoose.h"
#include 

//定义web服务端口号
static const char *s_http_port = "8000";

// mongoose事件处理器
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
    switch (ev) {
        case MG_EV_HTTP_REQUEST:
            // TODO
            // 根据请求类型进行相应逻辑处理
            break;
        default:
            break;
        }
}

//主程序
int main(void) {
    // 定义事件管理器与连接
    struct mg_mgr mgr;
    struct mg_connection *nc;

    // 初始化事件管理器
    mg_mgr_init(&mgr, NULL);

    // 绑定端口与事件处理狗子函数
    nc = mg_bind(&mgr, s_http_port, ev_handler);

    // 创建http连接
    mg_set_protocol_http_websocket(c);

    // 事件循环
    for (;;) {
        mg_mgr_poll(&mgr, 1000);
    }
    // 释放事件管理器
    mg_mgr_free(&mgr);

    return 0;
}

3、demo

结构:

include

—mongoose.h

—mongoose.c

src

—main.cpp

CMakeLists.txt

你可能感兴趣的:(C++,跨平台开发)