|
如果要用PHP写长连接网络应用,可以使用PHP Swoole. Swoole用C语言在PECL层面从头实现了进程/线程/事件驱动.
Swoole进程结构:
http://rango.swoole.com/archives/305
Swoole包含Master和Manager这两个进程,其中Master进程包含多个Reactor线程,Manager进程则包含多个Worker子进程和Task进程.
Reactor线程(epoll)异步并行地处理网络请求,然后再转发给Worker进程中去处理.
Reactor和Worker间通过IPC(inter-process communication,进程间通信)方式通信.
Manager进程会监视所有子进程的退出事件,当Worker进程发生致命错误或者运行生命周期结束时,管理进程会回收此进程,并创建新的进程.
Manager进程还可以平滑地重启所有Worker进程,以实现程序代码的重新加载.
同步阻塞,支持定时器的Task进程是异步任务管理器,可以使你的程序中某些处理慢的函数异步去执行,比如广播和发送邮件等.
任务丢给Task进程后,Worker进程可以继续处理新的数据请求,Task进程完成任务后会异步地通知Worker进程告诉它此任务已经完成.
另外Task进程还可以用来实现PHP的数据库连接池,异步队列等.
Swoole进程结构:
swoole_http_server的worker_num设为2:
pstree -H 6793 可见:
php(6793)───php(Manager进程)───2*[php] (Worker进程,数量由worker_num决定)
php(6793)───2*[{php}] (Reactor线程,数量由worker_num决定,但不多于CPU核心数)
其中6793是Master进程号.
|
|
|