http服务端 mongoose常用api

我给你整理一份最常用、必须掌握的 Mongoose API 清单 ,全部结合你的 HTTP 服务端代码 来讲,一看就懂、直接能用!

基于 Mongoose 服务端开发 ------ 核心 API 大全

1. 初始化管理器

cpp 复制代码
mg_mgr_init(&mgr_, nullptr);

作用:初始化 Mongoose 管理器,管理所有连接、事件。


2. 绑定端口 + 监听

cpp 复制代码
mg_bind(&mgr_, "0.0.0.0:8080", OnHttpWebsocketEvent);

作用:

  • 绑定 IP + 端口
  • 设置事件回调函数(收到请求、连接、断开都会走这里)

3. 设置 HTTP 协议

cpp 复制代码
mg_set_protocol_http_websocket(connection);

作用:让连接支持 HTTP + WebSocket 协议。


4. 事件轮询(必须调用!)

cpp 复制代码
mg_mgr_poll(&mgr_, 500);

作用:

  • 处理所有网络事件
  • 接收请求、发送数据、断开连接
  • 服务器主循环一定要写!

5. 释放管理器

cpp 复制代码
mg_mgr_free(&mgr_);

作用:关闭服务器,释放资源。


二、事件回调里常用的 API

6. 收到 HTTP 请求事件

cpp 复制代码
case MG_EV_HTTP_REQUEST:

作用:客户端发来 HTTP 请求时触发。


7. 解析 HTTP 请求

cpp 复制代码
http_message* req = (http_message*)event_data;

// 获取 URL
string url = string(req->uri.p, req->uri.len);

// 获取 Body
string body = string(req->body.p, req->body.len);

// 获取 Method
string method = string(req->method.p, req->method.len);

作用:解析客户端发来的 URL、请求体、请求方法(POST/GET)


8. 发送 HTTP 响应头

cpp 复制代码
mg_send_response_line(nc, 200, headers.c_str());

作用:发送 HTTP 状态行 + 响应头

例如:HTTP/1.1 200 OK


9. 分块发送数据(chunked)

cpp 复制代码
mg_send_http_chunk(nc, data.data(), data.size());

作用:发送响应体


10. 发送结束标记

cpp 复制代码
mg_send_http_chunk(nc, "", 0);

作用:告诉客户端数据发送完毕。


11. 广播事件(线程池完成后回传)

cpp 复制代码
mg_broadcast(&mgr_, on_work_complete, &result, sizeof(result));

作用:跨线程通知 Mongoose 发送数据。


12. 发送错误页面

cpp 复制代码
mg_http_send_error(nc, 404, "Not Found");

三、你的代码中用到的 Mongoose API 清单(对照看)

cpp 复制代码
mg_mgr_init
mg_bind
mg_set_protocol_http_websocket
mg_mgr_poll
mg_mgr_free

mg_send_response_line
mg_send_http_chunk
mg_http_send_error
mg_broadcast

这些就是写 HTTP 服务端 95% 会用到的 API!


四、我给你一个最简单的 Mongoose 服务端示例(5 行核心)

cpp 复制代码
void fn(struct mg_connection* c, int ev, void* d) {
    if (ev == MG_EV_HTTP_REQUEST) {
        mg_send_response_line(c, 200, "Content-Type: text/plain\r\n");
        mg_send_http_chunk(c, "hello world", 11);
        mg_send_http_chunk(c, "", 0);
    }
}

int main() {
    struct mg_mgr mgr;
    mg_mgr_init(&mgr, 0);
    mg_bind(&mgr, "8080", fn);
    while(1) mg_mgr_poll(&mgr, 1000);
}

终极总结(你只需要记住)

Mongoose 做的事:

  • 监听端口
  • 接收请求
  • 解析 HTTP
  • 发送响应
  • 管理连接

你的框架做的事:

  • 线程池
  • 路由匹配
  • 会话管理
  • 业务逻辑

需要我给你整理一份 Mongoose 事件类型大全 吗?比如:

  • MG_EV_ACCEPT
  • MG_EV_HTTP_REQUEST
  • MG_EV_CLOSE
  • MG_EV_SEND

这些你代码里都用到了!

相关推荐
万联WANFLOW4 小时前
异地组网速度忽快忽慢到底怎么回事?直连与中继的判断方法和处理步骤
运维·网络·网络协议·p2p
金海星科技6 小时前
船舶交通管理中心的人工智能值守:从“听、说、读、写“看人机协同
人工智能·macos·xcode
步行cgn6 小时前
HTTP 请求报文结构详解:请求行、请求头、请求体各自的作用
网络·网络协议·http
OpenLoong 开源社区9 小时前
打破 NAT 限制,零侵入跨网络通信:基于 WebRTC 的透明 TCP 隧道跨网络通信方案
网络协议·tcp/ip·开源·webrtc·openloong开源社区
从琳开始9899 小时前
从Socket到UDP回显服务器:Java网络编程完整指南
java·网络·网络协议·udp·java-ee
看浪的路人10 小时前
第6讲:Streaming 优化——告别“转圈圈“的用户体验
ios·iphone·xcode
明天也要努力学习19 小时前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler
cpolar技术支持1 天前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
Tel199253080041 天前
温度湿度信号转WiFi/MQTT/Modbus TCP采集模块 无线传输
网络·网络协议·tcp/ip·工业自动化·工控设备
lazy H1 天前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408