Janus 会话生命周期(create / keepalive / destroy)

验证状态:已源码核验、未联调;适用基线:源码归纳 @ 2026-09-14

用途与场景

在对讲房间里创建 Janus 会话、维持其存活并在退出时销毁。本页是对讲域 server/center-server/ptt/v1/forward/janus/to 通道上 createkeepalivedestroy 三个请求的正本(operationId mqtt-janus-audiobridge-createmqtt-janus-audiobridge-keepalivemqtt-janus-audiobridge-destroy),覆盖各自的应答判据与超时。通道、transaction 与中心转发的公共契约适用于全部对讲 Janus 操作页,本页的「端点」小节是同类页面共享口径的展开。

使用位置

页面/功能 角色或空间分支
对讲房间连接链路按阶段维护 Janus 会话(create/keepalive/destroy;卸载或离开时收尾) 登录用户(机构/个人均可,取决于群组成员关系);需 MQTT 已连接且 SFU 在线门槛由上层状态机把关

端点

MQTT 发布 server/center-server/ptt/v1/forward/janus/to(回包按 transaction 首段 reply topic 回流)— create / keepalive / destroy 三个 Janus 会话生命周期请求,中心原文转发到物理 Janus。

通道契约全量事实(直通白名单、消费方、转发与回包路由)见 MQTT 主题清单 · 静态 topic动态下行(物理 server/{janusNo}/to 与 transaction 回包路由);字段级契约见 yaml 详解 · ptt forward-janus-to;janus 转发链的业务语义见设备业务 · mqtt-bridge 设备消息链

外层 wire 载荷为 {janusNo, transaction, ...janus 报文};transaction 形如 {replyTopic},{talkGroupId},{suffix},{wireId}wireId = YYYYMMDDHHmmssSSS-<nanoid 去符号>),reply topic 为 user/{username}/web/{sessionId}/talkgroup/{talkGroupId}/janus。三请求报文:create {janus:"create"}、keepalive {janus:"keepalive", session_id}(fire-and-forget)、destroy {janus:"destroy", session_id}

动线与完成判据

阶段 超时/边界 证据
create 8 秒阶段 deadline(SETUP_STAGE_DEADLINE_MS,超时 reason Create session timed out
keepalive 周期 20 秒(JANUS_KEEPALIVE_INTERVAL_MS);发出后 20 秒(JANUS_LIVENESS_DEADLINE_MS)内无任何当前会话回包/事件即判失活并触发恢复
destroy(主动退出) 远端清理 deadline 3 秒(REMOTE_CLEANUP_DEADLINE_MS);到点后本地继续退出流程 及清理分支
会话终止事件 timeout/destroyed/hangup/detached/核心 458/插件 left/destroyed 都收敛为 sessionTerminal,驱动状态机进入恢复或失败 parseSessionTerminal

错误与边界

  • 中心转发丢弃(群组路由缺失、transaction 不合法、payload 非单一 JSON object)无任何回执:请求只会等到超时。这是当前直通边界的已核验行为。
  • error.code=458(含无 session_id 的 keepalive 回包)判会话终止;keepalive 在途事务回包同时充当存活证明。
  • 发布失败(MQTT 未连接/发布异常)→ transport 失败;请求在 outputQueue(并发 1)中排队,单条发布 8 秒 deadline(JANUS_PUBLISH_DEADLINE_MS)。
  • 自动重试:失败按 max(3,n)×1000ms 退避重试,最多 99 次(AUDIOBRIDGE_MAX_AUTOMATIC_RETRIES);核心/插件不可重试错误码见 join 正本 错误表。
  • 公共边界见MQTT 连接与消息边界Janus 信令边界

调用关系与资源清理

  • 时序:createattachjoinconfigure(媒体就绪);keepalive 每 20 秒贯穿全程。
  • destroy 之后 session 路由缓存仍指向旧 reply topic,直到下一会话的 transaction 覆盖;Web 侧 cancelPendingRequests 在新 create 前清空在途请求。
  • 页面卸载用捕获的 transport client 发送 leave/destroy(尽力而为,失败不重试)。

已知缺口

  1. Janus 服务器实现(会话超时阈值、destroyed 事件形态、错误码全集)源码不在本工作区;本页以 Web 成功判据 + 中心转发/路由证据为界,未联调。
  2. 中心转发对物理 Janus 的投递依赖 server/{janusNo}/to 的物理桥(Broker 侧部署件),其可用性未核验。
  3. keepalive 周期 20 秒与 Janus 默认会话超时(60 秒)的关系按 Web 常量记录,未做真实环境验证。