码迷,mamicode.com
首页 > 其他好文 > 详细

[原]网络库libevent在Visual Studio中的使用方法

时间:2014-09-18 13:12:23      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   strong   

  libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。

1、下载编译libevent

  下载当前最新的libevent稳定版本libevent-2.0.21-stable.tar.gz安装包,解压到某个固定目录。打开Visual Studio的Command Prompt终端,进入libevent-2.0.21-stable目录,输入如下指令编译libevent代码库:

nmake /f Makefile.nmake

2、收集libevent相关头文件和库文件

  libevent编译完成后,生成的相关静态库文件包括三个:libevent.lib libevent_core.lib libevent_extras.lib,可以单独建立一个lib文件夹存放;

  相关的头文件包括三个地方:(1)libevent-2.0.12-stable\include\*   (2)libevent-2.0.12-stable\WIN32-Code\*    (3)libevent-2.0.12-stable\*.h

把这些头文件都复制一下放到一个单独的include文件夹中方便管理。

3、在VS工程中指定libevent的include和lib文件夹

  有两个地方指定:(1)新建一个工程后,在工程的“配置属性”-->“C/C++”-->“常规”-->“附加包含目录”中给出include文件夹路径;(2)直接在VS“工具”-->“选项”-->“项目和解决方案”-->“VC++目录”中给出include和lib目录路径。

  相比而言,第一种方式我发现在代码中虽然编译不会出错,但是不能自动定位头文件和函数位置;第二种方式就能够清晰定位出libevent头文件和函数的位置。

4、设置工程“运行时库”属性

  在工程的“配置属性”-->“C/C++”-->“代码生成”-->“运行时库”中选择“多线程(/MT)”。

5、设置工程依赖和忽略函数库

  在工程的“配置属性”-->“链接器”-->“输入”中指出“附加依赖项”包括:ws2_32.lib wsock32.lib libevent.lib libevent_core.lib libevent_extras.lib

  在“忽略特定库”包括:libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib

6、测试代码

  来一段测试代码试一下:

bubuko.com,布布扣
 1 #include <stdio.h>
 2 #define WIN32_LEAN_AND_MEAN
 3 #include <windows.h>
 4 #include <winsock2.h>
 5 #include <event.h>
 6 #include <evhttp.h>
 7 void root_handler(struct evhttp_request *req, void *arg)
 8 {
 9     struct evbuffer *buf = evbuffer_new();
10     if(!buf)
11     {
12         puts("failed to create response buffer");
13         return;
14     }
15     evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));
16     evhttp_send_reply(req, HTTP_OK, "OK", buf);
17 }        
18 
19 void generic_handler(struct evhttp_request *req, void *arg)
20 {
21     struct evbuffer *buf = evbuffer_new();
22     if(!buf)
23     {
24         puts("failed to create response buffer");
25         return;
26     }
27     evbuffer_add_printf(buf, "Requested: %s\n", evhttp_request_uri(req));
28     evhttp_send_reply(req, HTTP_OK, "OK", buf);
29 }
30 
31 int main(int argc, wchar_t* argv[])
32 {
33     struct evhttp *httpd;    
34     WSADATA wsaData;
35     DWORD Ret;
36     if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
37     {
38         printf("WSAStartup failed with error %d\n", Ret);
39         return -1;
40     }
41     event_init();
42     httpd = evhttp_start("0.0.0.0", 8505);
43     if(!httpd)
44     {
45         return 1;
46     }
47     evhttp_set_cb(httpd, "/", root_handler, NULL);
48     evhttp_set_gencb(httpd, generic_handler, NULL);
49     printf("httpd server start OK!\n");
50     event_dispatch();
51     evhttp_free(httpd);
52     WSACleanup();
53     return 0;
54 }
View Code

 

[原]网络库libevent在Visual Studio中的使用方法

标签:style   blog   http   color   io   os   使用   ar   strong   

原文地址:http://www.cnblogs.com/kuliuheng/p/3978951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!