我给你整理一份最常用、必须掌握的 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_ACCEPTMG_EV_HTTP_REQUESTMG_EV_CLOSEMG_EV_SEND
这些你代码里都用到了!