设为首页 加入收藏

TOP

libevent库的使用--内置http服务器
2014-11-24 07:42:55 】 浏览:7236
Tags:libevent 使用 内置 http 服务器

如果希望构建本机应用程序,可以使用一般的基于网络的 libevent 接口;但是,越来越常见的场景是开发基于 HTTP 协议的应用程序,以及装载或动态地重新装载信息的网页。如果使用任何 AJAX 库,客户端就需要 HTTP,即使您返回的信息是 XML 或 JSON。

libevent 中的 HTTP 实现并不是 Apache HTTP 服务器的替代品,而是适用于与云和 web 环境相关联的大规模动态内容的实用解决方案。例如,可以在 IBM Cloud 或其他解决方案中部署基于 libevent 的接口。因为可以使用 HTTP 进行通信,服务器可以与其他组件集成。

要想使用 libevent 服务,需要使用与主要网络事件模型相同的基本结构,但是还必须处理网络接口,HTTP 包装器会替您处理。这使整个过程变成四个函数调用(初始化、启动 HTTP 服务器、设置 HTTP 回调函数和进入事件循环),再加上发送回数据的回调函数。

#include 
  
   

#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         void generic_request_handler(struct evhttp_request *req, void *arg) { struct evbuffer *returnbuffer = evbuffer_new(); evbuffer_add_printf(returnbuffer, "Thanks for the request!"); evhttp_send_reply(req, HTTP_OK, "Client", returnbuffer); evbuffer_free(returnbuffer); return; } int main(int argc, char **argv) { short http_port = 8081; char *http_addr = "192.168.0.22"; struct evhttp *http_server = NULL; event_init(); http_server = evhttp_start(http_addr, http_port); evhttp_set_gencb(http_server, generic_request_handler, NULL); fprintf(stderr, "Server started on port %d\n", http_port); event_dispatch(); return(0); }
       
      
     
    
   
  

应该可以通过前面的示例看出代码的基本结构,不需要解释。主要元素是 evhttp_set_gencb() 函数(它设置当收到 HTTP 请求时要使用的回调函数)和 generic_request_handler() 回调函数本身(它用一个表示成功的简单消息填充响应缓冲区)。

HTTP 包装器提供许多其他功能。例如,有一个请求解析器,它会从典型的请求中提取出查询参数(就像处理 CGI 请求一样)。还可以设置在不同的请求路径中要触发的处理函数。通过设置不同的回调函数和处理函数,可以使用路径 '/db/' 提供到数据库的接口,或使用 '/memc' 提供到 memcached 的接口。

libevent 工具包的另一个特性是支持通用计时器。可以在指定的时间段之后触发事件。可以通过结合使用计时器和 HTTP 实现提供轻量的服务,从而自动地提供文件内容,在修改文件内容时更新返回的数据。例如,以前要想在新闻频发的活动期间提供即时更新服务,前端 web 应用程序就需要定期重新装载新闻稿,而现在可以轻松地提供内容。整个应用程序(和 web 服务)都在内存中,因此响应非常快。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇类的初始化以及创建对象后的初始化 下一篇libevent库的使用--定时器的使用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目