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`,使错误信息可以打印到屏幕
';