分页:1 / 1

PHP的异步多线程框架Swoole

发表于 : 2019-02-13 13:42
IOsetting
工作模式
Swoole是一个多进程模式的框架(可以类比Nginx的进程模型), 当启动一个Swoole应用时, 一共会创建2 + n + m个进程, 其中n为Worker进程数, m为TaskWorker进程数, 2为一个Master进程和一个Manager进程.
Master进程为主进程, 该进程会创建Manager进程、Reactor线程等工作进/线程.
  • Reactor线程实际运行epoll实例,用于accept客户端连接以及接收客户端数据
  • Manager进程为管理进程,该进程的作用是创建、管理所有的Worker进程和TaskWorker进程
  • Worker进程作为Swoole的工作进程, 所有的业务逻辑代码均在此进程上运行.
当Reactor线程接收到来自客户端的数据后, 会将数据打包通过管道发送给某个Worker进程. 当一个Worker进程被成功创建后, 会调用onWorkerStart回调, 随后进入事件循环等待数据. 当通过回调函数接收到数据后, 开始处理数据. 如果处理数据过程中出现严重错误导致进程退出, 或者Worker进程处理的总请求数达到指定上限, 则Worker进程调用onWorkerStop回调并结束进程.

安装
通过pecl安装, 系统中最好已经有http2依赖(如果要使用Http2协议, 需要依赖nghttp2库, 下载nghttp2 https://github.com/tatsuhiro-t/nghttp2 后编译安装) 运行pecl需要autoconf, 如果没有会报错 Cannot find autoconf. Please check your autoconf installation

代码: 全选

sudo pecl install swoole
根据自己系统带了哪些模块选择

代码: 全选

enable sockets supports? [no] : yes
enable openssl support? [no] : yes
enable http2 support? [no] : yes
enable mysqlnd support? [no] : yes
enable postgresql coroutine client support? [no] :
然后根据提示, 在php.ini里添加相应的扩展, php.ini的位置可以通过以下命令查看

代码: 全选

# php -i |grep php.ini
Configuration File (php.ini) Path => /opt/php/php7.2.10/etc
Loaded Configuration File => /opt/php/php7.2.10/etc/php.ini

代码: 全选

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
...
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop
extension=mongodb
extension=swoole
重启php-fpm后, 在phpinfo()里就能看到swoole的信息了. 在命令行下, 可以通过下面的命令查看

代码: 全选

php -m | grep swoole