onStart
启动后在主进程(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
回调函数。