Server->start

最后更新于:2022-04-02 06:19:54

# Server->start [TOC] 启动服务器,监听所有`TCP/UDP`端口,函数原型: ~~~ bool Server->start() ~~~ * 启动成功后会创建`worker_num`+`2`个进程。`Master`进程+`Manager`进程+`serv->worker_num`个`Worker`进程。 * 启动失败会立即返回`false` * 启动成功后将进入事件循环,等待客户端连接请求。`start`方法之后的代码不会执行 * 服务器关闭后,`start`函数返回`true`,并继续向下执行 > 设置了`task_worker_num`会增加相应数量的`Task`进程 > 函数列表中`start`之前的方法仅可在`start`调用前使用,在`start`之后的方法仅可在`onWorkerStart`、`onReceive`等事件回调函数中使用 ## Master 主进程 主进程内有多个`Reactor`线程,基于`epoll/kqueue`进行网络事件轮询。收到数据后转发到`Worker`进程去处理 ## Manager 进程 对所有`Worker`进程进行管理,`Worker`进程生命周期结束或者发生异常时自动回收,并创建新的`Worker`进程 ## Worker 进程 对收到的数据进行处理,包括协议解析和响应请求。未设置`worker_num`,底层会启动与`CPU`数量一致的`Worker`进程。 * * * 启动失败扩展内会抛出致命错误,请检查`php error_log`的相关信息。`errno={number}`是标准的`Linux Errno`,可参考相关文档。 如果开启了`log_file`设置,信息会打印到指定的`Log`文件中。 ## 开机启动 如果想要在开机启动时,自动运行你的`Server`,可以在`/etc/rc.local`文件中加入 ~~~ /usr/bin/php /data/webroot/www.swoole.com/server.php ~~~ 推荐使用`systemd`或`supervisor`实现服务管理。 ## 常见错误 * `bind`端口失败,原因是其他进程已占用了此端口 * 未设置必选回调函数,启动失败 * `PHP`代码存在致命错误,请检查`PHP`错误信息`php_errors.log` * 执行`ulimit -c unlimited`,打开`core dump`,查看是否有段错误 * 关闭`daemonize`,关闭`log`,使错误信息可以打印到屏幕
';