ServerManager

::: warning 服务管理类: EasySwoole\EasySwoole\ServerManager :::

ServerManager 它是一个单例类(use EasySwoole\Component\Singleton)

创建主服务

EasySwooleEventmainServerCreate事件中可通过createSwooleServer监听子服务. 该方法在框架底层自动调用,将创建一个swoole主服务(未开启服务),可通过getSwooleServer方法获取,并设置事件回调,调用原生swoole服务方法创建子服务,等

创建子服务

EasySwooleEventmainServerCreate事件中可通过addServer监听子服务.

  1. <?php
  2. public static function mainServerCreate(EventRegister $register)
  3. {
  4. ################# tcp 服务器1 没有处理粘包 #####################
  5. $tcp1ventRegister = $subPort1 = ServerManager::getInstance()->addServer('tcp1', 9502, SWOOLE_TCP, '0.0.0.0', [
  6. 'open_length_check' => false,//不验证数据包
  7. ]);
  8. $tcp1ventRegister->set(EventRegister::onConnect,function (\swoole_server $server, int $fd, int $reactor_id) {
  9. echo "tcp服务1 fd:{$fd} 已连接\n";
  10. $str = '恭喜你连接成功服务器1';
  11. $server->send($fd, $str);
  12. });
  13. $tcp1ventRegister->set(EventRegister::onClose,function (\swoole_server $server, int $fd, int $reactor_id) {
  14. echo "tcp服务1 fd:{$fd} 已关闭\n";
  15. });
  16. $tcp1ventRegister->set(EventRegister::onReceive,function (\swoole_server $server, int $fd, int $reactor_id, string $data) {
  17. echo "tcp服务1 fd:{$fd} 发送消息:{$data}\n";
  18. });
  19. }

::: warning addServer方法返回的是EventRegister方法注册类,可通过该类去注册/设置服务的事件回调 :::

获取服务

通过getSwooleServer可获取当前创建的swoole服务以及监听的子服务

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Apple
  5. * Date: 2018/11/1 0001
  6. * Time: 11:10
  7. */
  8. namespace App\HttpController;
  9. use EasySwoole\EasySwoole\ServerManager;
  10. use EasySwoole\Http\AbstractInterface\Controller;
  11. class Index extends Controller
  12. {
  13. function index()
  14. {
  15. // TODO: Implement index() method.
  16. }
  17. function push(){
  18. $fd = intval($this->request()->getRequestParam('fd'));
  19. $info = ServerManager::getInstance()->getSwooleServer()->connection_info($fd);
  20. if(is_array($info)){
  21. ServerManager::getInstance()->getSwooleServer()->send($fd,'push in http at '.time());
  22. }else{
  23. $this->response()->write("fd {$fd} not exist");
  24. }
  25. }
  26. }

同样,也可以在EasySwooleEventmainServerCreate事件 通过这个获取到主服务之后,添加一个自定义进程

  1. ServerManager::getInstance()->getSwooleServer()->addProcess((new Test('test_process'))->getProcess());

::: warning 获取到的是swoole的服务,可使用swoole服务所有的方法. :::

获取注册事件类 getMainEventRegister

getMainEventRegister方法可获取主服务的事件注册类,该类可注册主服务的事件回调
该方法框架底层自动调用,在mainServerCreate事件中,传入到EasySwooleEventmainServerCreate方法作为参数使用,例如为主服务注册onWorkerStart事件

  1. <?php
  2. public static function mainServerCreate(EventRegister $register)
  3. {
  4. $register->add($register::onWorkerStart,function (\swoole_server $server,int $workerId){
  5. var_dump($workerId.'start');
  6. });
  7. }

start和isStart

start方法将处理配置的swoole主服务,子服务,以及回调事件,并开启服务,该方法由框架内部调用,调用成功代表着服务已经启动成功. isStart 方法将返回服务是否启动成功的bool变量

getSubServerRegister

getSubServerRegister将获取到所有子服务创建的事件回调.