用途:pull 模块通过 push 服务器向浏览器和移动应用下发短命令,用于即时 UI 信号(如“第 42 行已变更”、计数器)等需要实时刷新的场景,而不是用于承载持久任务(见相关资料中的对比)。
主要能力:
- PHP 发送事件:\Bitrix\Main\Loader::includeModule('pull'); 后调用 $ok = \Bitrix\Pull\Event::add([...], [...]),失败时用 \Bitrix\Pull\Event::getLastError() 读取错误。收件人可为用户 ID、32 字符频道 ID 或 Bitrix\Pull\Model\Channel;第三参数可为 \CPullChannel::TYPE_PRIVATE(默认)或 TYPE_SHARED。支持 user_params、dictionary、expiry 等键;payload 含非法 UTF-8 会返回 false(EVENT_BAD_ENCODING)。投递入队后在命中结束时由后台任务发送,长时间 CLI worker 可在 add() 后直接调用 \Bitrix\Pull\Event::send()。
- 标签(CPullWatch):渲染页面时用 \CPullWatch::Add($userId, 'TAG'),后向所有关注者用 \CPullWatch::AddToStack('TAG', [...]);标签约存活 30 分钟,页面用 BX.PULL.extendWatch(tag) 续期。
- 前端订阅:引入 pull.client,moduleId 必须小写;BX.PULL.subscribe({moduleId, command, callback}) 可指定命令,也可不指定命令接收该模块全部命令;返回函数用于取消订阅。也支持 BX.PULL.attachCommandHandler 及 Vue 下 this.$Bitrix.PullClient.get().subscribe(...)。
- 移动推送:\Bitrix\Pull\Push::add($users, [...]),或在 Event::add() 中加 push / pushParamsCallback 同时发送;徽章刷新用 Push::add($userId, ['module_id' => 'pull', 'push' => ['badge' => 'Y']])。
使用要求与限制:需已配置服务器(CPullOptions::GetQueueServerStatus());移动推送还需 CPullOptions::GetPushStatus()。基线 main 23.0+,已验证 pull 26.100.0、main 26.800.0。PHP 与 JS 的 module_id/command 需一致,模块名小写;payload 应小并仅传 ID 与标志,重数据后续 AJAX 拉取。自 pull 26.100 起全局 protobuf 为精简构建,不可依赖全局 protobuf。
适用场景:页面局部实时更新、计数、需即时信号再按需拉取数据的 UI。限制:不应把 Pull 当作任务队列。缺失信息:安装命令、价格与收费方式暂未提供。