× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Server->start

启动服务器,监听所有TCP/UDP端口,函数原型:

bool Server->start()
  • 启动成功后会创建worker_num+2个进程。Master进程+Manager进程+serv->worker_numWorker进程。
  • 启动失败会立即返回false
  • 启动成功后将进入事件循环,等待客户端连接请求。start方法之后的代码不会执行
  • 服务器关闭后,start函数返回true,并继续向下执行

设置了task_worker_num会增加相应数量的Task进程
方法列表中start之前的方法仅可在start调用前使用,在start之后的方法仅可在onWorkerStartonReceive等事件回调函数中使用

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

推荐使用systemdsupervisor实现服务管理。

常见错误

  • bind端口失败,原因是其他进程已占用了此端口
  • 未设置必选回调函数,启动失败
  • PHP代码存在致命错误,请检查PHP错误信息php_errors.log
  • 执行ulimit -c unlimited,打开core dump,查看是否有段错误
  • 关闭daemonize,关闭log,使错误信息可以打印到屏幕

  • Lockheed

    哈喽,原文说【启动成功后会创建worker_num+2个进程】,我在实际操作中发现 无论我把work设置有多小,进程数至少有9,只有把work设置大于7之后的数量修改才是有效的?(MBP R)

  • 天明snap

    这个进程数默认是4个吗?

  • 15513082138

    Worker 进程是异步非阻塞的吗

  • ganl

    为啥我的进程数是work_num+1个呢?没有报错

  • ganl

    为啥我的进程数是work_num+1个呢?