mainServerCreate 事件(即主服务创建事件)

函数原型

  1. /**
  2. * @param \EasySwoole\EasySwoole\Swoole\EventRegister $register
  3. */
  4. public static function mainServerCreate(EventRegister $register)
  5. {
  6. }

已完成工作

在执行主服务创建事件时,框架此时已经完成的工作有:

  • bootstrap/initialize 事件加载完成
  • SwooleServer 创建成功
  • SwooleServer 注册了默认的 onRequest/onWorkerStart/onWorkerStop/onWorkerExit 事件。

开发者可进行的操作有:

  • 注册主服务回调事件
  • 添加子服务监听
  • SwooleTable/Atomic
  • 创建自定义进程
  • 启用前(在 mainServerCreate 事件中)调用协程 API

注册主服务回调事件

例如:为主服务注册 onWorkerStart 回调事件:

  1. /** @var \EasySwoole\EasySwoole\Swoole\EventRegister $register **/
  2. $register->add($register::onWorkerStart, function (\Swoole\Server $server,int $workerId){
  3. var_dump($workerId . 'start');
  4. });

例如:为主服务增加 onMessage 回调事件(前提是主服务类型为 WebSocket 服务):

  1. // 给 server 注册相关事件,在 WebSocket 服务模式下 message 事件必须注册
  2. /** @var \EasySwoole\EasySwoole\Swoole\EventRegister $register **/
  3. $register->set($register::onMessage,function (\Swoole\WebSocket\Server $server, \Swoole\WebSocket\Frame $frame){
  4. });

set 方法和 add 方法是不同的, set 将会覆盖之前配置的事件回调, 而 add 是增加一个新的回调。

添加子服务监听

例如:添加一个 tcp 子服务监听

  1. /** @var \Swoole\Server\Port $subPort **/
  2. $subPort = \EasySwoole\EasySwoole\ServerManager::getInstance()->getSwooleServer()->addListener('0.0.0.0', 9503, SWOOLE_TCP);
  3. $subPort->on('receive', function (\Swoole\Server $server, int $fd, int $reactor_id, string $data){
  4. var_dump($data);
  5. });
  6. // 配置 具体查看 Swoole 文档
  7. $subPort->set([
  8. ]);

具体可参考 TCP

Table && Atomic

具体调用方式请看具体章节:

Table

Atomic

创建自定义进程

具体详细操作可到 基础使用 -> 自定义进程中查看

  1. \EasySwoole\Component\Process\Manager::getInstance()->addProcess(new Test('test_process'));

TestEasySwoole\Component\Process\AbstractProcess 抽象类的子类

启用前(在 mainServerCreate 事件中)调用协程 API

开发者在 EasySwoole 主服务启动前调用协程 api,必须使用如下操作:

  1. $scheduler = new \Swoole\Coroutine\Scheduler();
  2. $scheduler->add(function() {
  3. /* 调用协程API */
  4. });
  5. $scheduler->start();
  6. // 清除全部定时器
  7. \Swoole\Timer::clearAll();