最近打算学习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、有哪些相关常量呢?
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::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.