workerman源码分析之事件驱动

workerman事件驱动相关类和接口介绍

1 事件文件

Workerman\Events\
    EventInterface.php    ;事件接口
    Ev.php                ;EV事件机制
    Event.php             ;Event事件机制
    Libvent.php           ;Libevent事件机制
    Select.php            ;Select事件机制

2 事件接口(EventInterface.php)

成员变量

;读事件,写事件,信号事件,周期事件,定时事件
const EV_READ = 1;
const EV_WRITE = 2;
const EV_SIGNAL = 4;
const EV_TIMER = 8;
const EV_TIMER_ONCE = 16;

成员方法

add()注册事件

public function add($fd, $flag, $func, $args = null);
> $fd:文件描述符
> $flag:事件类型
> $func:事件处理接口
> $args:参数

del():注销事件

public function del($fd, $flag);
> $fd:文件描述符
> $flag:事件类型

clearAllTimer():移除所有定时器事件

public function clearAllTimer();

loop():开启事件循环

public function loop();

3 Ev事件机制(Ev.php)

成员变量

;所有读写事件,信号事件,定时器事件
protected $_allEvents = array();
protected $_eventSignal = array();
protected $_eventTimer = array();
;定时器id
protected static $_timerId = 1;

成员方法

add($fd, $flag, $func, $args = null)注册事件

public function add($fd, $flag, $func, $args = null)
> $fd:文件描述符
> $flag:事件类型
> $func:事件回调函数
> $args:参数

del($fd, $flag) 注销事件

public function listen() 启动端口监听
> $fd:文件描述符
> $flag:事件类型

timerCallback($event) 定时器回调接口

public function timerCallback($event)
> $event:事件参数

clearAllTimer() 移除所有定时器

public function clearAllTimer()

loop() 开启事件循环

public function loop()

4 Event事件机制(Event.php)

成员变量

;事件对象
protected $_eventBase = null;
;读写事件,信号事件,定时器事件
protected $_allEvents = array();
protected $_eventSignal = array();
protected $_eventTimer = array();
;定时器id
protected static $_timerId = 1;

成员方法

__construct():构造函数

public function __construct()

add($fd, $flag, $func, $args=array()):注册事件

public function add($fd, $flag, $func, $args=array())

del($fd, $flag):注销事件

public function del($fd, $flag)

timerCallback($fd, $what, $param):定时器回调

public function timerCallback($fd, $what, $param)

clearAllTimer():清除所有定时

public function clearAllTimer()

loop():开启事件循环

public function loop()

5 Livevent事件机制

成员变量

 ;事件对象
 protected $_eventBase = null;
 ;读写事件,信号事件,定时器事件
 protected $_allEvents = array();
 protected $_eventSignal = array();
 protected $_eventTimer = array();

成员方法

__construct():构造函数

public function __construct()

add($fd, $flag, $func, $args = array()):注册事件

public function add($fd, $flag, $func, $args = array())

del($fd, $flag:注销事件

protected static function reload() 进程重载

timerCallback($_null1, $_null2, $timer_id):定时器回调

protected function timerCallback($_null1, $_null2, $timer_id)

clearAllTimer():清除定时器事件

public function clearAllTimer()

loop():开启事件循环

public function loop()

6 Select事件机制

成员变量

 ;读写事件,信号事件
 public $_allEvents = array();
 public $_signalEvents = array();
 ;读描述符,写描述符
 protected $_readFds = array();
 protected $_writeFds = array();
 ;定时器调度栈,定时器监听,
 protected $_scheduler = null;
 protected $_task = array();
 ;定时器id
 protected $_timerId = 1;
 ;延时
 protected $_selectTimeout = 100000000;
 ;socket管道
 protected $channel = array();

成员方法

__construct():构造函数

public function __construct()

add($fd, $flag, $func, $args = array()):注册事件

public function add($fd, $flag, $func, $args = array())

signalHandler($signal):信号处理接口

public function signalHandler($signal)

del($fd, $flag):注销事件

public function del($fd, $flag)

tick():定时器调度

protected function tick()

clearAllTimer():清除定时器

public function clearAllTimer()

loop():开启事件循环

public function loop()

7 事件总结

事件机制实现对socket描述的事件回调处理

  • EventInterface.php 事件接口
  • Ev.php libev事件接口
  • Event.php Event扩展事件接口
  • Libevent.php Livevent扩展事件接口
  • Select.php Select事件接口

workerman事件机制所涉及到的扩展介绍

1 Ev事件处理器

1 扩展简介

内置事件处理器,无需安装

2 事件接口

final Ev{} 事件处理器核心

Ev::run()

final public static void  Ev::run  ([ int $flags  ] )

启动事件循环,等待注册的事件监视器相应事件发生
事件发生后,自动调用事件监视器的回调函数

class EvSignal{} 信号事件监视器
public EvSignal::__construct  ( int $signum  , callable  $callback  [, mixed  $data  = NULL    [, int $priority  = 0  ]] )

创建信号事件监视器并自动启动

class EvTimer{}  定时器事件监视器
public EvTimer::__construct  ( double $after  , double $repeat  , callable  $callback  [, mixed  $data  = NULL    [, int $priority  = 0  ]] )

创建定时器事件监视器并自动启动

class EvIo{} IO事件监视器
public EvIo::__construct  ( mixed  $fd  , int $events  , callable  $callback  [, mixed  $data  [, int $priority  ]] )

创建IO事件监视器并自动启动

2 Event事件处理器

1 扩展简介

安装libevent扩展

2 事件接口

final EventBase {} 事件循环体
public bool EventBase::loop  ([ int $flags  ] )

启动事件循环,等待事件发生

final Event {} 事件监视器
public Event::__construct  ( EventBase  $base  , mixed  $fd  , int $what  , callable  $cb  [, mixed  $arg  = NULL  ] )

创建各类事件监视器

public static Event  Event::signal  ( EventBase  $base  , int $signum  , callable  $cb  [, mixed  $arg  ] )

创建信号事件监视器

3 Livevent事件处理器

1 扩展简介

需要安装libevent扩展

2 事件接口

event_base_new() 创建事件循环

resource event_base_new  ( void )

event_new() 创建事件监视器

resource event_new  ( void )

event_set() 设置事件监视器

bool event_set  ( resource $event  , mixed  $fd  , int $events  , mixed  $callback  [, mixed  $arg  ] )

event_base_set() 注册事件监视器到事件循环

bool event_base_set  ( resource $event  , resource $event_base  )

event_add() 添加事件监视器

bool event_add  ( resource $event  [, int $timeout  = -1  ] )

event_del() 删除事件监视器

bool event_del  ( resource $event  )

event_base_loop() 启动事件循环

int event_base_loop  ( resource $event_base  [, int $flags  = 0  ] )

4 Select事件处理器

转载于:https://my.oschina.net/fage1151/blog/918580

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值