Wavelog Worker
Wavelog Worker
目录
仓库:GitHub 上的 wavelog/wavelog_worker
注意(仍在开发中)
Wavelog Worker 仍处于 < v1.0.0 阶段。API 与配置可能在不预先通知的情况下发生变化。你可以在生产环境中使用它,但请注意它仍在开发中,将来你可能需要做出调整。欢迎提供反馈并参与测试!
Wavelog Worker 是一个可选的附加服务,为 Wavelog 中的部分实时功能带来实时 WebSocket 连接。它充当浏览器与 Wavelog 的 PHP 后端之间的轻量级网关,为多人操作的台站提供即时的实时更新。对于同时有多个操作员访问 Wavelog 实时功能的任何环境,它都是必需的。Worker 的设计目标是部署简单(通过 Docker),并且易于融入 Wavelog 现有的架构。在更大的部署中,它还可以借助 Redis 做水平扩展。无论你运行的是一个小型集体台还是一场大型多人比赛,Wavelog Worker 都能确保所有操作员保持同步并获得实时更新——无需昂贵的轮询,也无需过度配置的基础设施。
Wavelog Worker 最初是为 Wavelog 新的比赛模式开发的,但任何能从实时推送更新中受益的功能都可以使用它。
它做什么?
Worker 监听 Wavelog 的 PHP 后端发出的广播事件(例如记录一条 QSO 时),并通过 WebSocket 把这些更新实时推送给所有已连接的浏览器。这样,多个操作员无需刷新页面,也无需等待 AJAX 轮询间隔,就能看到实时更新。
警告:一个 Wavelog 实例——一个 Worker(或一组 Worker)
无法把多个 Wavelog 实例连接到同一个 Wavelog Worker,因为双方需要共享同一组密钥。把多个 Wavelog 实例接到一个 Worker 上会导致主题冲突。所以不要这样做。
graph LR
A[Operator A<br/>Browser] -->|WebSocket| W[Wavelog Worker<br/>:9000]
B[Operator B<br/>Browser] -->|WebSocket| W
C[Operator C<br/>Browser] -->|WebSocket| W
P[Wavelog PHP] -->|Publish event on Port 9001| W
W -->|Push to all| A
W -->|Push to all| B
W -->|Push to all| C
A -->|Log QSO via AJAX| P
B -->|Log QSO via AJAX| P
你需要它吗?
Worker 是可选的。没有它,你的 Wavelog 安装仍能正常工作。
| 场景 | 需要 Worker 吗? |
|---|---|
| 单人操作、个人电台 | 否 |
| 无 Docker 的共享主机 | 否 |
| 同时只有少数用户(2–3 人)的集体台 | 否 |
| 任何实时功能上有大量并发用户(10+) | 是 |
| 大型多人比赛或繁忙的集体台 | 是 |
Worker 面向的是 10–20+ 名用户同时访问 Wavelog 的部署场景。在这些场景中,高频 AJAX 轮询可能导致性能问题。Worker 提供了 WebSocket 推送机制——这是单靠 PHP 无法实现的——并实时把更新送达所有已连接的浏览器。如果你只是一个小台站、只有少数用户,没有 Worker 也完全可以。但如果你运营的是繁忙的集体台、大型多人比赛,或任何并发用户众多的功能,就强烈建议使用 Worker,以确保流畅的性能与实时更新。
工作原理
Worker 是只推送的。操作员仍然通过 AJAX 把日志条目直接发送到 Wavelog 的 PHP 后端——Worker 不会代理或拦截这些请求。它唯一的职责是接收来自 PHP 的广播事件与数据,并立即把它们转发给同一主题上所有已连接的浏览器。
sequenceDiagram
participant PHP as Wavelog PHP
participant W as Worker
participant B as Browser
PHP->>W: POST /internal/register (topic)
B->>W: WebSocket connect + auth token
W-->>B: auth_ok
Note over B,PHP: Operator logs a QSO via AJAX
B->>PHP: POST /index.php/... (log QSO)
PHP->>W: POST /internal/publish (topic, payload)
W-->>B: push frame (live update)
环境要求
- Docker(或能够运行已编译的二进制文件)
- Wavelog 的 Web 服务器与 Worker 内部端口(9001)之间的网络访问——绝不要将 Worker 的内部端口暴露到公网!
- 浏览器经由反向代理访问 Worker 的 WebSocket 端口(9000),以获得正确的 SSL/WSS
- 至少 32 个字符的共享密钥
后续步骤
- 安装 Worker ——几分钟内通过 Docker 部署
- 连接 Wavelog ——把 Wavelog 指向你的 Worker
- 配置 Worker ——所有配置选项的说明
- 用 Redis 扩展 ——在负载均衡器后面运行多个 Worker 实例