× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

开关选项

4.2版本中,Runtime::enableCoroutine增加了第二个参数,可以设置开关选项,选择要Hook哪些PHP函数。

支持的选项

  • SWOOLE_HOOK_TCPTCP Socket类型的stream
  • SWOOLE_HOOK_UDPUDP Socket类型的stream
  • SWOOLE_HOOK_UNIXUnix Stream Socket类型的stream
  • SWOOLE_HOOK_UDGUnix Dgram Socket类型的stream
  • SWOOLE_HOOK_SSLSSL Socket类型的stream
  • SWOOLE_HOOK_TLSTLS Socket类型的stream
  • SWOOLE_HOOK_SLEEP:睡眠函数
  • SWOOLE_HOOK_FILE:文件操作
  • SWOOLE_HOOK_STREAM_SELECT: stream_select函数
  • SWOOLE_HOOK_BLOCKING_FUNCTION: 如gethostbyname等阻塞系统调用
  • SWOOLE_HOOK_ALL:打开所有类型 (不包括CURL)
  • SWOOLE_HOOK_CURL: 实验性选项, 默认不开启, 需配合与运算开启, 如SWOOLE_HOOK_ALL | SWOOLE_HOOK_CURL

使用实例

Swoole\Runtime::enableCoroutine(true, SWOOLE_HOOK_SLEEP);

go(function () {
    sleep(1);
    //注意仅 hook 了睡眠函数,下面的文件操作函数会导致阻塞
    $fp = fopen("test.log", "a+");
    fwrite($fp, str_repeat('A', 2048);
    fwrite($fp, str_repeat('B', 2048);
    fclose();
});

关闭HOOK

调用Runtime::enableCoroutine(false)关闭上一次设置的所有选项协程Hook设置。

注意关闭操作不接受第二个参数,底层会判断上一次打开时设置的选项列表,关闭对应的协程Hook设置。


  • 小六HI

    使用实例中,fwrite 少了右括号。

  • 小六HI

    fclose() 函数缺少关闭的 $fp 参数。