onStart

启动后在主进程(master)的主线程回调此函数,函数原型

function onStart(Server $server);

在此事件之前Server已进行了如下操作

  • 已创建了manager进程
  • 已创建了worker子进程
  • 已监听所有TCP/UDP/UnixSocket端口,但未开始Accept连接和请求
  • 已监听了定时器

接下来要执行

  • Reactor开始接收事件,客户端可以connectServer

onStart回调中,仅允许echo、打印Log、修改进程名称。不得执行其他操作。onWorkerStart和onStart回调是在不同进程中并行执行的,不存在先后顺序。

可以在onStart回调中,将$serv->master_pid$serv->manager_pid的值保存到一个文件中。这样可以编写脚本,向这两个PID发送信号来实现关闭和重启的操作。

onStart事件在Master进程的主线程中被调用。

onStart中创建的全局资源对象不能在Worker进程中被使用,因为发生onStart调用时,worker进程已经创建好了
新创建的对象在主进程内,Worker进程无法访问到此内存区域
因此全局对象创建的代码需要放置在Server::start之前

安全提示

onStart回调中可以使用异步和协程的API,但需要注意这可能会与dispatch_funcpackage_length_func存在冲突。请勿同时使用。

onStart回调在return之前服务器程序不会接受任何客户端连接,因此可以安全地使用CURLPHP提供的同步IO函数。

BASE 模式

BASE模式下没有master进程,因此不存在onStart事件。请不要在BASE模式中使用使用onStart回调函数。



  • 清流

    请问,onStart回调中“不得执行其他操作”"",又如何将$serv->master_pid和$serv->manager_pid的值保存到一个文件中**啊

  • dawn

    @清流 指的是不能调用server相关函数等操作,因为服务尚未就绪

  • finy

    这里的“不得执行其他操作”,应该是“不得执行异步操作”吧?