首页 > 代码库 > ubuntu 下 mongoose

ubuntu 下 mongoose


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这个字符串。


运行:syw@ubuntu:/usr/lib/cgi-bin$ sudo gcc web.c mongoose.c -ldl -lpthread -o web.c

syw@ubuntu:/usr/lib/cgi-bin$ ./web.c 

运行截图: