PHP - socket -libevent在php中的应用
(2013-09-02 00:03:38)
标签:
libevent在php中的应it |
分类: php那些事 |
Libevent在php中的应用学习
目录
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
fork n个worker。master
process
附: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
Tar
–zxvf
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
#define
EVLOOP_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模型
如果你使用sockets extension,这里有socket_select()、stream_select().对于大数应用程序来说,socket_select()、stream_select()已经是足够好的系统调用接口。
6、 epoll/kqueue模型