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

onManagerStart

当管理进程启动时调用它,函数原型:

void onManagerStart(swoole_server $serv);

在这个回调函数中可以修改管理进程的名称。

  • 4.2.12以前的版本中manager进程中不能添加定时器,不能使用taskasynccoroutine等功能
  • 4.2.12或更高版本中manager进程可以使用基于信号实现的同步模式定时器
  • manager进程中可以调用sendMessage接口向其他工作进程发送消息

启动顺序

onManagerStart触发时,说明:

  • TaskWorker进程已创建
  • Master进程状态不明,因为ManagerMaster是并行的,onManagerStart回调发生是不能确定Master进程是否已就绪

BASE 模式

BASE模式下,如果设置了worker_nummax_requesttask_worker_num参数,底层将创建manager进程来管理工作进程。因此会触发onManagerStartonManagerStop事件回调。


  • km3945

    $serv->on('managerStart', function($serv)use($argv){ swoole_set_process_name("php {$argv[0]}: manager"); $task_id = $serv->task('Eexecl', 1); });

    PHP Warning: swoole_server::task(): The method can only be used in the worker process

  • fifsky

    me to -> swoole_server::task(): The method can only be used in the worker process.

  • gaoyiping

    这个callback之前哪些动作做完了?

  • 18717991602

    如果我在OnManager事件中去$serv->redis = new Redis(); 那么我在OnWorkerStart去访问为什么可以访问,按照道理不是应该Manager应该是一个单独的进程吗

  • 霸气的千秋

    我开启的http server, 在Base模式下即使设置了worker_num,task_worker_num参数,底层没有创建manager进程来管理工作进程,实际上master进程身兼manager进程的工作了。onmanagerStart事件有触发 而且 onManagerStop事件也好像没有触发,写日志没有跟踪到。