Skip to content

Driver Config

Jerry Ma edited this page Feb 20, 2022 · 4 revisions

这里写的驱动配置指的是可以对驱动内的一部分功能进行自定义修改的配置,例如改变驱动的进程模型、初始化位置等。

驱动配置项列表

如果没有特殊说明,这里的配置项仅代表 driver.config 下面字段的配置。

配置项 适用驱动 默认值 说明
driver_init_policy all 4 见下方 DriverInitEvent 策略
swoole_server_mode Swoole SWOOLE_PROCESS 可选 SWOOLE_BASESWOOLE_PROCESS,见 Swoole 文档
init_in_user_process_block all true 当为 false 时,在运行 DriverInit 结束后不进入死循环,见下方用户进程阻断
swoole_set Swoole 见子表 Swoole Set Swoole Server 的 set 配置,见 Swoole 文档
swoole_ws_client_set Swoole ['websocket_mask' => true] Swoole 中 WebSocket Client 客户端下的 set 配置,见 Swoole 文档

字表 Swoole Set

配置名 配置值
max_coroutine 300000
max_wait_time 5

DriverInitEvent 策略

DriverInitEvent 为开发者使用的初始化使用协议相关的代码,例如实现 开黑啦、Discord 等 IM 平台的协议 SDK 对接等。但由于 libob 存在多进程运行的情况,所以 DriverInitEvent 可以自定义在不同进程中初始化。

  • 默认值DriverInitPolicy::MULTI_PROCESS_INIT_IN_FIRST_WORKER
  • 可选:
    • DriverInitPolicy::MULTI_PROCESS_INIT_IN_MASTER:只在 Master 进程中触发一次
    • DriverInitPolicy::MULTI_PROCESS_INIT_IN_MANAGER:只在 Manager 进程中触发一次(TODO:可能被废弃)
    • DriverInitPolicy::MULTI_PROCESS_INIT_IN_FIRST_WORKER:只在 Worker #0 中触发一次
    • DriverInitPolicy::MULTI_PROCESS_INIT_IN_USER_PROCESS:只在用户独立进程中触发一次(如果没有用户进程的事件,将创建用户进程)

用户进程阻断

在多进程的运行模式下,libob 通过驱动提供了一个在独立进程运行用户代码的能力,独立进程可用作分配客户端连接、对接协议、运行长时间的定时器、自定义的事件循环等。

在 Workerman 和 Swoole 驱动中,我们规定了默认的行为是:如果用户进程的代码运行完毕(不存在未结束的事件循环、不存在死循环等情况),则会自动退出,而驱动本身的进程管理器会认为驱动本体还未退出,所以就再次启动了一个新的用户进程。为了防止用户进程反复重启,我们加入了阻断配置:init_in_user_process_block

这个配置的触发条件是:如果添加了一个 DriverInitEvent,且 driver_init_policyMULTI_PROCESS_INIT_IN_USER_PROCESS,那么则会让该配置有效,但默认为 true,只有你手动将配置项改为 false 才不会被阻断进入死循环,但这样可能导致用户进程反复重新启动。

zh-CN en-US

前言

入门指南

进阶指南

Clone this wiki locally