swoole / rfc

Swoole 提案
116 stars 3 forks source link

PHP 层支持 Hook 机制 #43

Open matyhtf opened 5 years ago

matyhtf commented 5 years ago

有很多场景,我们希望不修改 PHP 代码就可以注入一些 Hook 函数到ServerClient中。使用Hook机制就可以支持这些功能。

Hook API将加入Runtime模块。

API

function Runtime::addHook(int $hook_type, callable $function, int $priority = false) : int;
function Runtime::delHook(int $hook_id);
Swoole\Runtime::addHook(SWOOLE_HOOK_BEFORE_SERVER_START, function (Swoole\Server $server) {
    var_dump($server->setting);
});

上面的例子就是添加了一个服务器启动的Hook,在$server->start()之前,这个函数会被回调。

Hook Type

目前会先增加5Hook,在新版本迭代中,会根据实际需要增加更多的Hook Type

应用场景

例如下列场景就可以使用Hook无侵入地实现:

8923052 commented 5 years ago

支持,很有用。

2pgcn commented 5 years ago

支持支持

ghost commented 5 years ago

mark

similarJ commented 5 years ago

业务代码层面也能实现相应的功能。

hhxsv5 commented 5 years ago

正打算实现reload 自定义进程,这样只需加hook SWOOLE_HOOK_BEFORE_SERVER_RELOAD,再写reload自定义进程的逻辑。

matyhtf commented 5 years ago

@hhxsv5 自定义进程的生命周期与 Master Manager 是相同的,因此不会接受 reload 信号。你这个需求属于特殊需求,因此需要增加一些 php 代码来实现。

hhxsv5 commented 5 years ago

@hhxsv5 自定义进程的生命周期与 Master Manager 是相同的,因此不会接受 reload 信号。你这个需求属于特殊需求,因此需要增加一些 php 代码来实现。

是的,有了这个hook后,自己实现自定义进程的reload逻辑

v3u3i87 commented 5 years ago

有了这个功能很多进程监控更方便了

aierui commented 5 years ago

支持

Yurunsoft commented 5 years ago

和监听Server事件冲突了吧,是否有些多余