用途:这是用于 Phoenix 实时广播与 PubSub 相关工作的技能,要求在编写任何 PubSub 订阅、broadcast 或实时更新 handle_info 代码之前调用,覆盖 LiveView 的订阅、广播与消息处理模式。
主要能力与规则:订阅必须放在 if connected?(socket) 内部,避免静态渲染与连接后阶段重复订阅导致重复消息;广播应发生在 context 模块而非 LiveView,以把实时逻辑保留在业务层;只在成功时广播,通过私有 broadcast/2 匹配 {:ok, result},{:error, changeset} 原样透传;在 handle_info/2 中使用 update/3 以不可变方式更新 assigns,不要直接改 socket.assigns;订阅与广播的 topic 字符串必须完全一致且区分大小写;为每个广播事件添加 handle_info/2 子句,未处理消息会崩溃 LiveView,并可用 catch-all 兜底;测试应通过调用 context 函数并断言 LiveView 渲染更新,而非单独测试 PubSub.broadcast。
用法要点:在 mount 中用 if connected?(socket) 守卫调用 Phoenix.PubSub.subscribe(MyApp.PubSub, "posts");在 context 写入成功后调用 Phoenix.PubSub.broadcast;topic 可按集合、具体资源或用户维度命名;handle_info/2 中按事件类型不可变更新。
适用场景与限制:适用于 Phoenix LiveView 实时列表与资源更新;限制与故障排查包括订阅未触发时确认连接已升级、广播后视图未更新时核对 topic 完全匹配、出现重复消息时检查是否漏写 connected? 守卫。
资料未提供安装命令、收费与版本要求。