使用libevent搭建简单http服务器

@使用libevent搭建简单http服务器

一、libevent 的下载
可通过官网直接进行下载libevent库;例子使用的是V2.1.1版本,下载完成后,解压;可以再解压目录下获取 Makefile.nmake 文件,可通过nmake工具自己编译,注意编译的项目属性要与使用的版本一致,否则会出现编译异常的问题;下面链接是编译完成的VS2008版本MD和MT版本的静态库,可直接使用;如所需版本不同,请不要下载;
@VS2008_MD(MT)_staic_lib
二、下载完成后,开始搭建环境:
1,使用VS2008新建一个Win32控制台程序
在这里插入图片描述
2,新建一个.h的头文件,作为http类的头文件,并将包含头文件和库文件;同样也可再项目属性中添加依赖库文件和包含头文件的形式添加;
在这里插入图片描述
在这里插入图片描述
3,声明一个http的类,并声明其成员变量,如http_Start 函数作为启动http服务的成员函数;
在这里插入图片描述
4,创建一个.cpp文件,作为http类的实现文件;主要讲解http搭建的过程;主要用到函数如下:
a,WSAStartup 函数,启动winows异步套接字,调用前需要包含以下内容

#include <winsock2.h>
#pragma comment (lib,"Iphlpapi.lib")

b,event_base_new() 函数:使用libevent前需要创建一个或者多个event_base结构体,每个event_base 结构 体持有一个事件集合,可以检测以确定哪个事件是激活的;
c,evhttp_new()函数:创建http服务;
d,evhttp_bind_socket()函数,绑定服务地址及端口;
e,evhttp_set_timeout()函数,设置超时时间
f,evhttp_set_cb() 函数,注册事件;
g,event_base_dispatch()函数,设置循环监听;
h,event_free() 函数,释放http服务;
通过以上步骤可创建出一个简单的http服务,代码如下:


int Http::http_Start()
{
	//初始化套接字
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		ERROR_LOG("初始化套接字失败.\n");
		return HTTP_STARTUP_FAILED;
	}
	//支持多线程属性,
	evthread_use_windows_threads();
	//初始化服务
	struct event_base* base = event_base_new();
	if (!base)
	{
		ERROR_LOG("创建Event_base 失败.\n");
		return HTTP_NEW_BASE_FAILED;
	}
	struct evhttp* http_server = evhttp_new(base);
	if (!http_server)
	{
		return HTTP_NEW_SERVER_FAILED;
	}
	DEBUG_LOG("创建http服务成功.");
	//绑定
	if (evhttp_bind_socket(http_server, SERVICE_ADDR, http_uBusiness_Port) != 0)
	{
		sprintf(ErrInfo,"绑定业务IP及端口失败,端口:%u", http_uBusiness_Port);
		ERROR_LOG(ErrInfo);
		return HTTP_BIND_SOCKET_FAILED;
	}
	//绑定心跳包机制
	/*if (evhttp_bind_socket(http_KeepAliveServer, SERVICE_ADDR, http_uKeepAlive_Port) != 0)
	{
		return -1;
	}*/
	//设置超时时间
	evhttp_set_timeout(http_server, 1000);
	//绑定注册事件,其中http_handler_Callback_Post 为消息处理函数;
	evhttp_set_cb(http_server,"/TransVideo",http_handler_Callback_Post,this);
	//设置循环监听
	event_base_dispatch(base);
	//释放
	evhttp_free(http_server);
	return SUCCESS;
}
特别注意:evthread_use_windows_threads()这个函数,如果没有增加这个函数,无法在多线程编程中使用;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值