Libevent在php中的应用学习
来源:互联网 发布:条形码标签制作软件 编辑:程序博客网 时间:2024/06/16 19:31
Libevent在php中的应用学习
wangbin@2012,1,3
目录
Libevent在php中的应用学习
1、
2、
3、
4、
5、
6、
1、 libevent介绍
libevent是一个事件触发的网络库,适用于windows、linux、freebsd等多种平台,内部使用select、poll、epoll、kqueue等系统调用管理事件机制。Libevent是跨平台的,而且具有非凡的性能。与nodejs一样是事件驱动的;官方网站:http://libevent.org/
最新的稳定版本
https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz
主要模块:
事件处理框架
事件引擎模块
Buffer管理模块
信号处理模块
php本身不支持多线程,php不能很好实现并发机制。Pecl提供的pcntl(进程控制)、libevent扩展、socket包、stream系统函数,可以使用php轻易地开发出高性能,高并发的网络应用程序。
简单应用事例:Pcntl forkn个worker。master process 得到请求后,处理信息发送给worker程序、worker处理完后回传给client。Master process 可以跟据并发量,来设定worker的数量,即n的大小,并monitor(监控)worker的数据,在不足时启动更多的进程。同nginx原理。
附:Php网络编程框架
http://code.google.com/p/swoole/downloads/list
2、为什么要学习libevent
http server可以说是libevent的经典应用。可以从libevent当中找到http的标准写法,非阻塞的http server也就是socket处理与http协议处理缠绕。
学习libevent有助于提升程序设计功力,除了网络程序设计方面外,Libevent的代码里有很多有用的设计技巧和基础数据结构,比如信息隐藏、函数指针、c语言的多态支持、链表和堆等等,都有助于提升自身的程序功力[1]。
对请求的处理的三种类型:
1、
2、
3、
3、Php libevent扩展模块安装
Curl –O https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz
Tar –zxvf libevent-2.0.16-stable.tar.gz
Cd libevent-2.0.16-stable
/usr/local/php/bin/phpize
./configure
make
make install
vi /usr/local/php/etc/php.ini
extension_dir=””;
extension=libevent.so
php –m | grep lib
安装成功
4、Libevent常量及php函数
#define EV_TIMEOUT
#define EV_READ
#define EV_WRITE
#define EV_SIGNAL
#define EV_PERSIST
#define EV_ET
#defineEVLOOP_ONCE
#define EVLOOP_NONBLOCK 0x02
值
常量名
含义
1
EV_TIMEOUT
超过时间后事件成为激活状态
2
EV_READ
FD就绪,可以读取的时候,事件成为激活状态
4
EV_WRITE
FD就绪,可以写入的时候,事件成为激活状态
8
EV_SIGNAL
用于实现信号检测
16
EV_PERSIST
表示事件是持久的
32
EV_ET
表示底层是否支持边沿触发事件
1
EVLOOP_ONCE
如果设置了EVLOOP_ONCE,循环将等待某些事件成为激活的,执行激活的事件直到没有更多的事件可以执行,然会返回。
2
EVLOOP_NONBLOCK
如果设置了EVLOOP_NONBLOCK,循环不会等待事件被触发:循环将仅仅检测是否有事件已经就绪,可以立即触发,如果有,则执行事件的回调。
event_base_freee()
event_base_loop()
event_base_loopbreak()
event_base_loopexit()
event_base_new()
event_base_priority_init()
event_base_set()
event_buffer_base_set()
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()
event_buffer_timeout_set()
event_buffer_watermark_set
event_buffer_write()
event_add()
event_del()
event_free()
event_new()
event_set()
5、Select/poll模型
如果你使用socketsextension,这里有socket_select()、stream_select().对于大数应用程序来说,socket_select()、stream_select()已经是足够好的系统调用接口。
6、epoll/kqueue模型
<?php
{
}
// create base and event
$base = event_base_new();
$event = event_new();
$fd = STDIN;
event_set($event, $fd, EV_READ | EV_PERSIST, "print_line",array($event, $base));
// set event base
event_base_set($event, $base);
event_add($event);
// start event loop
event_base_loop($base);
参考:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
- Libevent在php中的应用学习
- php学习笔记(11):MYSQL在php5中的应用
- 学习ajax【3】AJAX在PHP中的应用示例
- JSON在PHP中的应用
- JSON在PHP中的应用
- JSON在PHP中的应用
- JSON在PHP中的应用
- JSON在PHP中的应用
- JSON在PHP中的应用
- AJAX在PHP中的应用
- JSON在PHP中的应用
- json 在php 中的应用
- JSON在PHP中的应用
- JSON在PHP中的应用
- JSON在PHP中的应用
- RBAC在PHP中的应用
- RabbitMQ 在php中的应用
- BigMap 在PHP中的应用
- php charts
- websocket规范 RFC6455 中文版
- 使用libevent和libev 提高网…
- OAuth那些事儿
- php libev
- Libevent在php中的应用学习
- nodejs pomelo
- chkconfig配置
- php apache
- Python Twisted 中文教程
- node chat
- geohash:用字符串实现附近地点搜…
- Android:Service非绑定
- 数码摄影曝光从入门到精通 如…