mongoose 是一个支持多协议的开源代码,这里主要结合 mongoose 源码梳理一下应用程序开发的基本步骤。
一般的 main 函数或是启动 mongoose 监听功能的代码,如下:
int main(int argc, char *argv[])
{
if(argc < 2)
{
errorf("Usage: %s port\n", argv[0]);
return 1;
}
int port = atoi(argv[1]);
// webStart();
struct userData uData{100};
struct mg_mgr mgr;
//mgr里的user_data指针将会指向第二个参数,当有连接过来时
//mg_connection中的mgr中的user_data指向的就是第二个参数
mg_mgr_init(&mgr, &uData);
char buf[32] = {0};
snprintf(buf, sizeof(buf), "%d", port);
struct mg_connection *con = mg_bind(&mgr, buf, eventHandler);
if(con == NULL) {
errorf("mg_bind fail\n");
return -1;
}
mg_set_protocol_http_websocket(con);
uData.index = 200;
infof("listen ip[%s], port[%d]....\n", inet_ntoa(con->sa.sin.sin_addr), port);
//uri是/fileUpload 时调用函数fileUpload
// mg_register_http_endpoint(con, "/fileUpload", fileUpload);
while (1)
{
mg_mgr_poll(&mgr, 100);
sleep(1);
}
mg_mgr_free(&mgr);
return 0;
}
其中涉及到 mongoose 接口的就有 5 个,下面我们一起看一下这 5 个接口主要做了哪些工作。
1,mg_mgr_init()
函数原型是:void mg_mgr_init(struct mg_mgr *mgr, void *user_data); 这个接口就是对 mgr 参数进行赋值操作,其实第二个参数也会赋值到 mgr 中,struct 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 **

本文介绍mongoose开源项目的应用开发流程,包括关键接口mg_mgr_init、mg_bind、mg_set_protocol_http_websocket、mg_mgr_poll及mg_mgr_free的使用方法,并提供一个简单的示例程序。
最低0.47元/天 解锁文章
1883

被折叠的 条评论
为什么被折叠?



