libevent例子--HTTP 服务器
来源:互联网 发布:淘宝店太坑了 编辑:程序博客网 时间:2024/05/16 09:28
使用内置的 HTTP 服务器
如果希望构建本机应用程序,可以使用一般的基于网络的 libevent 接口;但是,越来越常见的场景是开发基于 HTTP 协议的应用程序,以及装载或动态地重新装载信息的网页。如果使用任何 AJAX 库,客户端就需要 HTTP,即使您返回的信息是 XML 或 JSON。
libevent 中的 HTTP 实现并不是 Apache HTTP 服务器的替代品,而是适用于与云和 web 环境相关联的大规模动态内容的实用解决方案。例如,可以在 IBM Cloud 或其他解决方案中部署基于 libevent 的接口。因为可以使用 HTTP 进行通信,服务器可以与其他组件集成。
要想使用 libevent 服务,需要使用与主要网络事件模型相同的基本结构,但是还必须处理网络接口,HTTP 包装器会替您处理。这使整个过程变成四个函数调用(初始化、启动 HTTP 服务器、设置 HTTP 回调函数和进入事件循环),再加上发送回数据的回调函数。清单 4 给出一个非常简单的示例:
清单 4. 使用 libevent 服务的简单示例
#include <sys/types.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <event.h>#include <evhttp.h>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 的接口。
from:http://www.ibm.com/developerworks/cn/aix/library/au-libev/
=======================================================================
使用libevent的http框架的一点小技巧
http://tech.uc.cn/?p=2625Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器
http://zyan.cc/libevent_windows/
支持 TCP 和 HTTP 协议,基于 libev 的异步服务框架
http://www.oschina.net/code/snippet_2620963_54111
- libevent例子--HTTP 服务器
- libevent http post 服务器
- libevent http服务器实现
- libevent库的使用--内置http服务器
- 基于libevent框架搭建http服务器
- libevent例子
- libevent 例子
- libevent http
- 利用libevent做一个简单的服务器压力测试例子
- libevent 多线程例子
- libevent入门小例子
- libevent代码例子----定时器
- libevent helloworld 例子解析
- Libevent的一个例子
- libevent例子:hello-world
- python http服务器线程封装例子
- HTTP协议 & Libevent
- libevent http client
- Linux gcc编译提示:undefined reference to `sqrtf' collect2: error: ld returned 1 exit status
- sdut oj3341 数据结构实验之二叉树二:遍历二叉树
- ios setNeedsDisplay和setNeedsLayout的区别与用处
- 1041. Be Unique (20)-PAT甲级真题(Hash散列)
- 数据结构实验之二叉树的建立与遍历
- libevent例子--HTTP 服务器
- 输出CString
- 多表查询,嵌套查询
- hdu 2089 不要62(数位dp)
- Linux修改Tmpfs
- 数据结构实验之二叉树三:统计叶子数
- cdh5.3.6下hue3.7.0的安装部署
- source insight context window不能显示上下文的问题
- HDU 1069 Monkey and Banana