mongoose是一款非常容易使用的web服务器,实现了对socket的封装,它提供给我们的接口非常简洁,并且能提供很好的性能。
几个重要的结构:
struct mg_context
服务器上下文,保存着服务器的配置信息。每个mg_context都代表一个服务器。
struct mg_connection
表示HTTP的连接
struct mg_request_info
HTTP请求信息。这个结构中保存着用户请求的所有的信息,例如http版本信息等。
重要的函数:
void mg_set_uri_callback(struct mg_context *context, const char *uri_regex, mg_callback_t func, void *user_data)
函数中的第一个参数是服务器上下文。
第二第三的参数分别是URI地址和函数指针,mg_set_uri_callback这个函数的功能就是在把这两个参数间联系起来,在用户申请这个URI时,服务器就会这个函数指针指向的函数。func的原型是:
void mg_set_log_callback(struct mg_context *ctx, mg_callback_t func)
第四个参数是func的一个参数。
mongoose使用实例
使用mongoose创建一个web服务大致可以分为两个部分:1.启动并配置服务器;2.处理请求,在配置服务器是,我们需要指定相应的URI handler,URI handler是一个函数,这个函数在用户请求URI时被调用。
一个简单的例子:
#include "mongoose.h"
static void
show_index(
struct mg_connection *conn,
const struct mg_request_info *request_info,
void *user_data)
{
mg_printf(conn, "%s",
"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
mg_printf(conn,"%s","<html><h3>test</h3></html><br>")}
int main(int argc,char *argv[])
{
struct mg_context *ctx;ctx = mg_start(); //第1步
if (mg_get_option(ctx,"ports")==NULL &&
mg_set_option(ctx,"ports","8080")!=1) { //第2步
exit(1);
}mg_set_uri_callback(ctx,"/",&show_index,(void*)&data); //第3步
getchar();
mg_stop(ctx);
return (0);
}
第一步:创建一个服务器。
第二部:配置服务器。这个例子中配置了服务器的端口号。
第三步:配置URI对应的函数,这里的URI是”/”,当用户请求的URI是/时,服务器调回调用show_index函数处理这个请求。show_index需要用户自行定义,我们写了一个最简单的版本,它在浏览器上显示test这个字符串。
mongoose主页: