VS2010下libevent的如何使用

简介: VS2010下libevent的如何使用

官网:http://libevent.org/


以libevent-2.0.22-stable为例,


1、解压缩libevent-2.0.22-stable.tar.gz。


2、打开“Visual Studio 命令提示(2010)”,进入第1步解压后的文件夹,例如:E:\libevent-2.0.22-stable,执行命令“nmake /f Makefile.nmake”,编译完之后,会在路径下生成3个lib文件,分别是libevent.lib、libevent_core.lib、libevent_extras.lib。我们新建lib文件夹,存放这3个文件。

image.png



libevent_core :所有核心的事件和缓冲功能,包含了所有的 event_base 、 evbuffer 、 bufferevent 和工具函数。


libevent_extra :定义了程序可能需要,也可能不需要的协议特定功能,包括 HTTP、 DNS 和 RPC。


libevent:这个库因为历史原因而存在 ,它包含 libevent_core 和 libevent_extra 的内容。 不应该使用这个库,未来版本的 libevent 可能去掉这个库。


3、建立VS2010的工程时,除了需要使用到上面的3个lib文件,还需要E:\libevent-2.0.22-stable\include\和E:\libevent-2.0.22-stable\WIN32-Code\。


我们把E:\libevent-2.0.22-stable\WIN32-Code\下面的文件夹和文件拷贝到E:\libevent-2.0.22-stable\include\下面。


我们把include文件夹更名为“inc_libevent”。然后把“lib”文件夹放入“inc_libevent”。

image.png



4、把“inc_libevent”文件夹拷贝到VS2010的工程。


(1).h文件


image.png


#include <event2/bufferevent.h>

#include <event2/bufferevent_compat.h>

#include <event2/buffer.h>

#include <event2/listener.h>

#include <event2/util.h>

#include <event2/event.h>

#include <event2/http.h>

#include <event2/buffer_compat.h>

#include <event2/http_struct.h>

#include <event2/thread.h>


(2).lib文件


#pragma comment(lib, "ws2_32.lib")


#pragma comment(lib, "wsock32.lib")


#pragma comment(lib, "inc_libevent\\lib\\libevent.lib")

#pragma comment(lib, "inc_libevent\\lib\\libevent_core.lib")

#pragma comment(lib, "inc_libevent\\lib\\libevent_extras.lib")


5、win32的示例


// libEvt_test.cpp : 定义控制台应用程序的入口点。

//


#include "stdafx.h"

#include <string.h>  

#include <iostream>  

#include <event2/bufferevent.h>

#include <event2/bufferevent_compat.h>

#include <event2/buffer.h>

#include <event2/listener.h>

#include <event2/util.h>

#include <event2/event.h>


#pragma comment(lib, "ws2_32.lib")

#pragma comment(lib, "wsock32.lib")

#pragma comment(lib, "inc_libevent\\lib\\libevent.lib")

#pragma comment(lib, "inc_libevent\\lib\\libevent_core.lib")

#pragma comment(lib, "inc_libevent\\lib\\libevent_extras.lib")


using namespace std;


static void accept_conn_cb(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr* addr, int len, void *ptr)

{

/* get libevent event_base from listener */

struct event_base* base = evconnlistener_get_base(listener);

cout<<"accept a link"<<endl;

}


int _tmain(int argc, _TCHAR* argv[])

{

WSADATA WSAData;

WSAStartup(0x0201, &WSAData);


struct event_base* base;


base = event_base_new();


struct sockaddr_in sin;


/* init addr 初始化绑定地址和端口*/

memset(&sin, 0, sizeof(sin));

sin.sin_family = AF_INET;

sin.sin_addr.s_addr = htonl(0);//等价于inet_addr("127.0.0.1");

sin.sin_port = htons(6666);


struct evconnlistener* listener;


/* init a libevent listener 给event_base绑定地址和端口,设置监听属性,设置回调函数 (如果使用evconnlistenner_new函数的话需要自己来绑定端口和初始化socket,并把socket_fd传递给该函数)*/

listener = evconnlistener_new_bind(base, accept_conn_cb, NULL, LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE, -1,(struct sockaddr*)&sin, sizeof(sin));


/* start loop for accept_conn_cb */

event_base_dispatch(base);


getchar();


return 0;

}



6、推荐几篇参考文章:


(1)高性能、高并发TCP服务器(多线程调用libevent)


http://blog.csdn.net/i_am_jojo/article/details/7587838


http://download.csdn.net/detail/aillean/7521245


(2)libevent带负载均衡的多线程使用示例


http://blog.chinaunix.net/uid-756931-id-353318.html


(3)对libevent+多线程服务器模型的C++封装类


http://www.tuicool.com/articles/QBj2ma


相关文章
|
8月前
libevent/libev框架实战
libevent/libev框架实战
81 0
|
C++ 存储 Cloud Native
c++ libevent demo
c++ libevent demo
|
XML 编解码 自然语言处理
不需要熟悉,但需要了解的libiconv库
但是很多老式的计算机还在使用当地的传统的字符编码方式。而一些程序,例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换。其他的一些程序则内置支持Unicode,以顺利支持国际化的处理,但是仍然有在Unicode和其他的传统编码之间转换的需求。GNU的libiconv就是为这两种应用设计的编码转换库。
不需要熟悉,但需要了解的libiconv库
|
4月前
|
Linux Python
linux 封装 python
linux 封装 python
26 0
|
4月前
|
Linux Python
Linux 下封装 Python
Linux 下封装 Python
23 0
|
存储 网络安全 C++
C++ LibCurl 库的使用方法
LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括`HTTP`、`FTP`、`SMTP`、`POP3`等协议的功能,使用`libcurl`可以方便地进行网络数据传输操作,如发送`HTTP`请求、下载文件、发送电子邮件等。它被广泛应用于各种网络应用开发中,特别是涉及到数据传输的场景。
466 0
|
8月前
|
Linux API iOS开发
libevent介绍和使用
libevent 是一个开源的事件通知库,它提供了一个跨平台的抽象接口,libevnet处理的事件包括网络IO事件,定时事件以及信号事件。它可以在不同的操作系统上使用,包括Linux、Windows和Mac OS X等。libevent 的主要目的是提供高效的事件通知机制,用户无需关注平台检测处理事件的机制的差异,只需关注事件的具体处理。它可以用于编写服务器、客户端和其他网络应用程序。
150 0
|
8月前
|
网络协议 Linux API
c++网络库Libevent万字详解
libevent和libev都是c语言实现的异步事件库;通过注册异步事件,库检测事件触发,从而库根据发生事件的先后顺序,调用相应回调函数进行处理;事件包括:网络io事件,定时事件,信号事件;事件循环:等待并分发事件;用于管理事件;libevent 和 libev 主要封装了异步事件库与操作系统的交互;让用户不用关注平台的差异,只需着手事件的具体处理;创建事件处理框架event_base event_base_new()创建新事件event event_new()
260 0
|
存储 缓存 JavaScript
libevent实战的那些坑
libevent实战的那些坑
466 0
libevent实战的那些坑
|
安全 网络协议 Unix
Linux高性能I/O框架库Libevent介绍
Linux高性能I/O框架库Libevent介绍
102 0