领先的中文IT技术网站    IT技术从现在起飞

飞诺旗下: 技术社区 | 在线电子书 | 在线试题 | 资源下载 | 飞诺搜索 | 技术博客
用户名: 密   码:
   飞诺网 加入收藏
飞诺网 C 新闻频道 开发频道 系统频道 服务器 网络频道 网络安全 Java频道 C/C++ PHP开发 电子书 资源下载 社 区 博 客 在线试题
软件编程 C C++ Java VB Delphi Foxpro 汇编语言 游戏开发 移动开发 软件工程师 软工与管理 VC shell编程 C#
编程开发 JAVA C/C++ C++ VC C语言 VB C# Delphi Foxpro 汇编 shell编程 游戏开发 软件工程师 WEB开发 PHP ASP Asp.net JSP AJAX CGI JavaScript HTML CSS 数据库 MSSQL Mysql Oracle Access Sybase DB2 sql2005 Office Word Excel Powerpoint Wps 认证考试 二级C语言 三级网络 程序员 网络工程师 思科认证

您当前的位置:飞诺网 >>  软件编程 >>  C >> C语言技术文章

高性能,分布式,轻量级缓存组件memcached的源码剖析---第二篇,libevent

www.firnow.com    时间 : 2007-10-09  作者:佚名   编辑:本站 点击:   [ 评论 ]

step0: 概述
关于libevent, 先摘来网上某哥们一段描述:
 libevent是一个跨平台的事件驱动库,他目前支持Linux, *BSD, Mac OS X, Solaris 和  Windows。如果你将要开发的应用程序需要支持以上所列出的平台中的两个以上,那么强烈建议你采用这个库,即使你的应用程序只需要支持一个平台,选择libevent也是有好处的,因为它可以根据编译/运行环境切换底层的事件驱动机制,这既能充分发挥系统的性能,又增加了软件的可移植性。

它封装并且隔离了事件驱动的底层机制,除了一般的文件描述符读写操作外,它还提供有读写超时、定时器和信号回调,另外,它还允许为事件设定不同的优先级,当前版本的libevent还提供dns和http协议的异步封装,这一切都让这个库尤其适合于事件驱动应用程序的开发。

step1: 使用方法介绍
OK,理论到位了,接下来简单介绍下libevent中几个核心函数:

event_set(&c->event, sfd, event_flags, event_handler, (void *)c)
把sfd这个文件描述符放入c->event,并且告知当事件event_flags发生时回调event_handler,并以c为回调参数。

event_add(&ev, NULL)
把ev注册到事件队列里面,第二个参数指定的是超时值,设定成NULL表示忽略这项设定。

event_dispatch()
表示进入事件循环,当队列里任何一个文件描述符发生事件的时候就会执行回调函数。

step2: 演示例子
下面举个小例子,就timer server吧,比较SB易懂咯,赶紧贴上源码:

 



#include <netinet/in.h>
#include 
<sys/socket.h>
#include 
<sys/types.h>
#include 
<stdio.h>
#include 
<time.h>

#include 
<event.h>


void connection_time(int fd, short eventstruct event *arg){
    
char buf[32];
    
struct tm t;
    time_t now;
    time(
&now);
    localtime_r(
&now, &t);
    asctime_r(
&t, buf);
    write(fd, buf, strlen(buf));
    shutdown(fd, SHUT_RDWR);
    free(arg);
}


void connection_accept(int fd, short eventvoid *arg){
 &nbs
 1 2 3 4 5
如果图片或页面不能正常显示请点击这里
C语言技术文章推荐文章

文章评论

BBS社区热贴