-
Notifications
You must be signed in to change notification settings - Fork 3
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_BASE 、SWOOLE_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 文档
|
配置名 | 配置值 |
---|---|
max_coroutine |
300000 |
max_wait_time |
5 |
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_policy
为 MULTI_PROCESS_INIT_IN_USER_PROCESS
,那么则会让该配置有效,但默认为 true,只有你手动将配置项改为 false 才不会被阻断进入死循环,但这样可能导致用户进程反复重新启动。