libevent php timer,libevent 定时器timer

libevent是一个基于事件触发的网络库,memcached底层也是使用libevent库。

总体来说,libevent有下面一些特点和优势:

* 事件驱动,高性能;

* 轻量级,专注于网络;

* 跨平台,支持 Windows、Linux、Mac Os等;

* 支持多种 I/O多路复用技术, epoll、poll、dev/poll、select 和kqueue 等;

* 支持 I/O,定时器和信号等事件;

libevent有下面几大部分组成:

* 事件管理包括各种IO(socket)、定时器、信号等事件,也是libevent应用最广的模块;

* 缓存管理是指evbuffer功能;

* DNS是libevent提供的一个异步DNS查询功能;

* HTTP是libevent的一个轻量级http实现,包括服务器和客户端

一些资料:

* libevent官网:http://libevent.org/

* libevent API:http://www.monkey.org/~provos/libevent/doxygen-2.0.1/index.html

* CSDN上剖析得很赞的文章:http://blog.csdn.net/sparkliang/article/details/4957667

// =============================================================================================

下面写了2个简单的使用例子,一个是定时器,一个是TCP服务器,都只涉及到libevent的事件管理模块。

一、简单定时器:实现程序每秒输出一个“Game Over!”

event_init() => evtimer_set() => event_add() =>event_dispatch()

#include

#include

// libevent头文件

#include

using namespace std;

// 定时事件回调函数

void onTime(int sock, short event, void *arg)

{

cout << "Game Over!" << endl;

struct timeval tv;

tv.tv_sec = ;

tv.tv_usec = ;

// 重新添加定时事件(定时事件触发后默认自动删除)

event_add((struct event*)arg, &tv);

}

int main()

{

// 初始化

event_init();

struct event evTime;

// 设置定时事件

evtimer_set(&evTime, onTime, &evTime); //初始化事件event,设置回调函数和关注的事件

struct timeval tv;

tv.tv_sec = ;

tv.tv_usec = ;

// 添加定时事件

event_add(&evTime, &tv);

// 事件循环

event_dispatch();

return ;

}

_devnet_1:/data/home/andyawang/code/2013_11/LibeventTest # mv time.cpp timer.cpp

gapp_devnet_1:/data/home/andyawang/code/2013_11/LibeventTest # g++ -o timer timer.cpp -levent

gapp_devnet_1:/data/home/andyawang/code/2013_11/LibeventTest # ./timer

Game Over!

Game Over!

Game Over!

二、TCP服务器:实现监听本机8888端口并输出客户端发送过来的信息

event_base_new()=>event_set()=>event_base_set()=>event_add()=>event_base_dispatch()

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

// 事件base

struct event_base* base;

// 读事件回调函数

void onRead(int iCliFd, short iEvent, void *arg)

{

int iLen;

char buf[];

iLen = recv(iCliFd, buf, , );

if (iLen <= ) {

cout << "Client Close" << endl;

// 连接结束(=0)或连接错误(<0),将事件删除并释放内存空间

struct event *pEvRead = (struct event*)arg;

event_del(pEvRead);

delete pEvRead;

close(iCliFd);

return;

}

buf[iLen] = ;

cout << "Client Info:" << buf << endl;

}

// 连接请求事件回调函数

void onAccept(int iSvrFd, short iEvent, void *arg)

{

int iCliFd;

struct sockaddr_in sCliAddr;

socklen_t iSinSize = sizeof(sCliAddr);

iCliFd = accept(iSvrFd, (struct sockaddr*)&sCliAddr, &iSinSize);

// 连接注册为新事件 (EV_PERSIST为事件触发后不默认删除)

struct event *pEvRead = new event;

event_set(pEvRead, iCliFd, EV_READ|EV_PERSIST, onRead, pEvRead);

event_base_set(base, pEvRead);

event_add(pEvRead, NULL);

}

int main()

{

int iSvrFd;

struct sockaddr_in sSvrAddr;

memset(&sSvrAddr, , sizeof(sSvrAddr));

sSvrAddr.sin_family = AF_INET;

sSvrAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

sSvrAddr.sin_port = htons();

// 创建tcpSocket(iSvrFd),监听本机8888端口

iSvrFd = socket(AF_INET, SOCK_STREAM, );

bind(iSvrFd, (struct sockaddr*)&sSvrAddr, sizeof(sSvrAddr));

listen(iSvrFd, );

// 初始化base

base = event_base_new();

struct event evListen;

// 设置事件

event_set(&evListen, iSvrFd, EV_READ|EV_PERSIST, onAccept, NULL);

// 设置为base事件

event_base_set(base, &evListen);

// 添加事件

event_add(&evListen, NULL);

// 事件循环

event_base_dispatch(base);

return ;

}

python中实现定时器Timer

实现定时器最简单的办法是就是循环中间嵌time.sleep(seconds), 这里我就不赘述了 # encoding: UTF-8 import threading #Timer(定时器)是Thre ...

订餐系统之定时器Timer不定时

经过几天漫长的问题分析.处理.测试.验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统日志中会有警告,如果您有更好的方案 ...

PHP框架Swoole的一个定时器Timer特性

在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计.通知等操作. 比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行.到期情况.整个项目的进度等等,根据统计情况,做相 ...

C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...

iOS 定时器Timer常见问题

最近有朋友问我使用NStimer遇见与ScrollView并存时存在主线程阻塞的问题,自己总结几种解决方法: 问题原因: 一般定时器timer都会被以默认模式default添加到主线程的runloop ...

定时器Timer不定时

订餐系统之定时器Timer不定时 经过几天漫长的问题分析.处理.测试.验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统 ...

多线程&;定时器Timer&;同步&;线程通信&;ThreadLocal

1.多线程 线程状态分为:新建状态.就绪状态.运行状态.阻塞状态.死亡状态 对象等待池的阻塞状态:运行状态执行了wait方法 对向锁池的阻塞状态:试图获得某个同步锁,已经被其他线程占用,就会放到对象的 ...

Java进阶(十八)Java实现定时器(Timer)

Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...

定时器Timer&;ScheduledThreadPoolExecutor

定时器Timer&ScheduledThreadPoolExecutor /** * @ClassName: TimerTest * @author: daniel.zhao * @date: ...

随机推荐

(笔记)Linux内核学习(八)之定时器和时间管理

一 内核中的时间观念 内核在硬件的帮助下计算和管理时间.硬件为内核提供一个系统定时器用以计算流逝的时间.系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理. 墙上时间和系 ...

nginx+tomcat实现动静分离

本文设计的动静分离结构 在本文中,我们将静态资源放在 A 主机的一个目录上,将动态程序放在 B 主机上,同时在 A 上安装 Nginx 并且在 B 上安装 Tomcat.配置 Nginx,当请求的是 ...

Python IDE Tools

PyCharmhttps://www.jetbrains.com/pycharm/download/ Sublimehttp://www.sublimetext.com/

c语言数组的操作

#include #include #include//exit() struct Arr//定义了一个数 ...

Steps

uva846:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

actor简介

今天抽时间,给team做了一次actor介绍,现附上ppt actor 简介及应用

HDU 4704 Sum (费马定理+快速幂)

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

SQL查询语句分类

SQL查询语句有多种,下面总结下.首先先建三张表用于后面的实验 -- 学生表,记录学生信息 CREATE TABLE student( sno ), sname ), ssex ENUM('男','女 ...

property()函数

class C: def __init__(self, size=10): self.size = size def getXSize(self): return self.size def setX ...

我不是bug神(JVM问题排查)

Story background 回望2018年12月,这也许是程序员们日夜不得安宁的日子,皆因各种前线的系统使用者都需要冲业绩等原因,往往在这个时候会向系统同时写入海量的数据,当我们的应用或者数据库 ...

你可能感兴趣的:(libevent,php,timer)