🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
我们来使用实例进行分析: ``` php <?php $server = new \swoole_server("127.0.0.1",8088);//默认是多进程模式、TCP类型 $server->on('connect', function ($serv, $fd){ }); $server->on('receive', function ($serv, $fd, $from_id, $data){ }); $server->on('close', function ($serv, $fd){ }); $server -> start(); ``` 继续在Shell中输入以下命令: ``` shell php swoole_tcp_server.php pstree -ap|grep swoole_tcp_server | | `-php,2454 swoole_tcp_server.php | | |-php,2456 swoole_tcp_server.php | | | `-php,2458 swoole_tcp_server.php ``` 从系统的输出中,我们可以很容看出server其实有3个进程,进程的pid分别是2454、2456、2458,其中2454是2456的父进程,而2456又是2458的父进程。 > 所以,其实我们虽然看起来只是启动了一个Server,其实最后产生的是三个进程。 这三个进程中,所有进程的根进程(2454),就是所谓的`Master`进程;而2456进程,则是`Manager`进程;最后的2458进程,是`Worker`进程。 基于此,我们简单梳理一下,当执行的start方法之后,发生了什么: - 守护进程模式下,当前进程fork出Master进程,然后退出,Master进程触发OnMasterStart事件。 - Master进程启动成功之后,fork出Manager进程,并触发OnManagerStart事件。 - Manager进程启动成功时候,fork出Worker进程,并触发OnWorkerStart事件。 > 非守护进程模式下,则当前进程直接作为Master进程工作。 所以,一个最基础的Swoole Server,至少需要有3个进程,分别是Master进程、Manager进程和Worker进程。 事实上,一个多进程模式下的Swoole Server中,有且只有一个Master进程;有且只有一个Manager进程;却可以有n个Worker进程。