Libevent系列学习二(demo分享) 发布日期:2017-03-02 22:24:16     博主推荐★

最近打算学习websocket这块的内容,既然说到这块内容就不得不想到后端服务器的承载!看了很多相关东西,比如swoole安装和学习这块知识,但是一直感觉很担心其稳定性。当然不是对韩大神的无理,而是因为小编的水平实在有限,遇到相关扩展的问题,很难去解决。workman貌似一款不错的东西,但是workman也是基于PHP开发的,所以反正是学习,别人能开发这样的框架,小编不自量力的也想要试一试!基于这样一种心态,小编想要做一次libevent的深度学习,也许大神看到这个系列文章觉得,小编有点SB,但是所谓愚公移山,我们一步步走,来!

demo01:定时执行

$base = event_base_new();
$event = event_new();
 
event_set($event, 0, EV_TIMEOUT, function() {
   echo "function called";
});
event_base_set($event, $base);
 
event_add($event, 5000000);
event_base_loop($base);

demo02:持续监听

function print_line($fd, $events, $arg)
{
 static $max_requests = 0;
 $max_requests++;
 if ($max_requests == 10) {
    // exit loop after 10 writes
    event_base_loopexit($arg[1]);
 }
 var_dump($fd);
}
 
// create base and event
$base = event_base_new();
$event = event_new();
 
$fd = STDIN;
// set event flags
event_set($event, $fd, EV_PERSIST, 'print_line', array($event, $base));
// set event base
event_base_set($event, $base);
// enable event
event_add($event,1);
// start event loop
event_base_loop($base);

通过以上案例你有没有一点感觉呢?

如果你真的折腾了的,你会发现:

1、event_add和event_set是一一对应的(可以只有set没有add,但是不能有add没set)

2、所有event必须基于event_base

3、event_base_loop的返回值有(-1,0,1)三种

注:-1:表示存在未处理的错误

  0:表示正常返回了

  1:没有注册事件(回到总结1的问题:如果只有set没有add的话,就会告诉你当前事件没有注册)

4、有哪些相关常量呢?

1457431582292560.png

5、有哪些相关函数呢?

event_base_free() 释放资源,这不能销毁绑定事件

event_base_loop() 处理事件,根据指定的base来处理事件循环

event_base_loopbreak() 立即取消事件循环,行为各break语句相同

event_base_loopexit() 在指定的时间后退出循环

event_base_new() 创建并且初始事件

event_base_priority_init() 设定事件的优先级

event_base_set() 关联事件到事件base

event_buffer_base_set() 关联缓存的事件到event_base

event_buffer_disable() 禁用一个缓存的事件

event_buffer_enable() 启用一个指定的缓存的事件

event_buffer_fd_set() 改变一个缓存的文件系统描述

event_buffer_free() 释放缓存事件

event_buffer_new() 建立一个新的缓存事件

event_buffer_priority_set() 缓存事件的优先级设定

event_buffer_read() 读取缓存事件中的数据

event_buffer_set_callback() 给缓存的事件设置或重置回调hansh函数

event_buffer_timeout_set() 给一个缓存的事件设定超时的读写时间

event_buffer_watermark_set 设置读写事件的水印标记

event_buffer_write() 向缓存事件中写入数据

event_add() 向指定的设置中添加一个执行事件

event_del() 从设置的事件中移除事件

event_free() 清空事件句柄

event_new() 创建一个新的事件

event_set() 准备想要在event_add中添加事件


需要注意的点:

Event flags

Event::READ This flag indicates an event that becomes active when the provided file descriptor (usually a stream resource, or socket) is ready for reading.

Event::WRITE flag indicates an event that becomes active when the provided file descriptor (usually a stream resource, or socket) is ready for writing.

Event::SIGNAL used to implement signal detection. See "Constructing signal events" below.

Event::TIMEOUT indicates an event that becomes active after a timeout elapses. The Event::TIMEOUT flag is ignored when constructing an event: one can either set a timeout when event is added , or not. It is set in the $what argument to the callback function when a timeout has occurred.


博文地址:https://blog.ahamu.cn/blog/detail.html?id=116
   
推荐文章
  • 1
    sysbench
    2020/07/08
  • 2
    phper转java记录篇-spring boot
    2020/06/10
  • 3
    thinkphp5.0使用路由之后,post请求的
    2020/05/19
  • 4
    springboot单元测试aop失效
    2020/05/15
  • 5
    脑海中的JVM
    2020/05/12
  • 6
    IDEA搜索插件时显示search results
    2020/05/12
  • 7
    spring boot 配置加载源码查找
    2020/04/20
  • 8
    通过javap命令分析java汇编指令
    2020/04/16
  • 9
    IDEA小知识:查看JVM内存使用情况的步骤
    2020/04/16
  • 10
    springboot-加载自定义的properti
    2020/04/14
  • 11
    Jenkins执行shell脚本无法启动子进程解决
    2020/04/03
  • 12
    mac idea激活找专业的
    2020/04/02
  • 13
    Jenkins + DockerSwarm 实现弹
    2020/03/31
  • 14
    mac swarm学习过程
    2020/03/31
  • 15
    spring cloud
    2020/03/18
  • 16
    JAVA开发中遇到的问题记录002
    2020/03/12
  • 17
    JAVA开发中遇到的问题记录001
    2020/03/07
  • 18
    php -i查看信息
    2020/02/23
  • 19
    phpStorm中使用xdebug工具调试dock
    2019/12/09
  • 20
    讲的比较好的B+树执行原理的文章
    2019/12/09
最喜标签
NYOJ 面试 AJAX ping CentOS 灰度算法 YII2