c++利用mongoose搭建restful风格的webservice
c++利用mongoose搭建restful风格的webservice0、mongoose介绍跨平台:可在linux/unixmacos QNX eCos Windows Android Iphone FreeRtos上运行支持的硬件平台: TI CC3200, TI MSP432, NRF52, STM32, PIC32, ESP8266, ESP32 and more内置协议栈:...
·
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到你的工程即可完成整合
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 <string>
//定义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
更多推荐
所有评论(0)