onStart

最后更新于:2022-04-02 06:23:50

# onStart [TOC] 启动后在**主进程(master)**的主线程回调此函数,函数原型 ~~~ function onStart(Server $server); ~~~ 在此事件之前`Server`已进行了如下操作 * 已创建了`manager`进程 * 已创建了`worker`子进程 * 已监听所有`TCP/UDP/UnixSocket`端口,但未开始`Accept`连接和请求 * 已监听了定时器 接下来要执行 * 主`Reactor`开始接收事件,客户端可以`connect`到`Server` **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_func`和`package_length_func`存在冲突。请勿同时使用。 `onStart`回调在`return`之前服务器程序不会接受任何客户端连接,因此可以安全地使用`CURL`等`PHP`提供的同步`IO`函数。 ## BASE 模式 `BASE`模式下没有`master`进程,因此不存在`onStart`事件。请不要在`BASE`模式中使用使用`onStart`回调函数。
';