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时被调用。
一个简单的例子:
web.c
#include<stdio.h> #include<stdlib.h> #include<string.h> #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,NULL); //第3步 getchar(); mg_stop(ctx); return (0); }
第一步:创建一个服务器。
第二部:配置服务器。这个例子中配置了服务器的端口号。
第三步:配置URI对应的函数,这里的URI是”/”,当用户请求的URI是/时,服务器调回调用show_index函数处理这个请求。show_index需要用户自行定义,我们写了一个最简单的版本,它在浏览器上显示test这个字符串。
运行:[email protected]:/usr/lib/cgi-bin$ sudo gcc web.c mongoose.c -ldl -lpthread -o web.c
[email protected]:/usr/lib/cgi-bin$ ./web.c
运行截图:
ubuntu 下 mongoose,布布扣,bubuko.com