mainServerCreate 事件(即主服務(wù)創(chuàng)建事件)
函數(shù)原型
/**
* @param \EasySwoole\EasySwoole\Swoole\EventRegister $register
*/
public static function mainServerCreate(EventRegister $register)
{
}
已完成工作
在執(zhí)行主服務(wù)創(chuàng)建事件時,框架此時已經(jīng)完成的工作有:
-
bootstrap/initialize
事件加載完成 - 主
SwooleServer
創(chuàng)建成功 - 主
SwooleServer
注冊了默認(rèn)的onRequest/onWorkerStart/onWorkerStop/onWorkerExit
事件。
開發(fā)者可進(jìn)行的操作有:
- 注冊主服務(wù)回調(diào)事件
- 添加子服務(wù)監(jiān)聽
SwooleTable/Atomic
- 創(chuàng)建自定義進(jìn)程
- 啟用前(在 mainServerCreate 事件中)調(diào)用協(xié)程 API
注冊主服務(wù)回調(diào)事件
例如:為主服務(wù)注冊 onWorkerStart
回調(diào)事件:
/** @var \EasySwoole\EasySwoole\Swoole\EventRegister $register **/
$register->add($register::onWorkerStart, function (\Swoole\Server $server,int $workerId){
var_dump($workerId . 'start');
});
例如:為主服務(wù)增加 onMessage
回調(diào)事件(前提是主服務(wù)類型為 WebSocket
服務(wù)):
// 給 server 注冊相關(guān)事件,在 WebSocket 服務(wù)模式下 message 事件必須注冊
/** @var \EasySwoole\EasySwoole\Swoole\EventRegister $register **/
$register->set($register::onMessage,function (\Swoole\WebSocket\Server $server, \Swoole\WebSocket\Frame $frame){
});
set
方法和 add
方法是不同的, set 將會覆蓋之前配置的事件回調(diào), 而 add 是增加一個新的回調(diào)。
添加子服務(wù)監(jiān)聽
例如:添加一個 tcp
子服務(wù)監(jiān)聽
/** @var \Swoole\Server\Port $subPort **/
$subPort = \EasySwoole\EasySwoole\ServerManager::getInstance()->getSwooleServer()->addListener('0.0.0.0', 9503, SWOOLE_TCP);
$subPort->on('receive', function (\Swoole\Server $server, int $fd, int $reactor_id, string $data){
var_dump($data);
});
// 配置 具體查看 Swoole 文檔
$subPort->set([
]);
具體可參考 TCP
Table && Atomic
具體調(diào)用方式請看具體章節(jié):
創(chuàng)建自定義進(jìn)程
具體詳細(xì)操作可到 基礎(chǔ)使用 -> 自定義進(jìn)程中查看
\EasySwoole\Component\Process\Manager::getInstance()->addProcess(new Test('test_process'));
Test
是EasySwoole\Component\Process\AbstractProcess
抽象類的子類
啟用前(在 mainServerCreate 事件中)調(diào)用協(xié)程 API
開發(fā)者在 EasySwoole
主服務(wù)啟動前調(diào)用協(xié)程 api
,必須使用如下操作:
$scheduler = new \Swoole\Coroutine\Scheduler();
$scheduler->add(function() {
/* 調(diào)用協(xié)程API */
});
$scheduler->start();
// 清除全部定時器
\Swoole\Timer::clearAll();