Wavelog Worker

Wavelog Worker

目录

仓库:GitHub 上的 wavelog/wavelog_worker

注意(仍在开发中)

Wavelog Worker 仍处于 < v1.0.0 阶段。API 与配置可能在不预先通知的情况下发生变化。你可以在生产环境中使用它,但请注意它仍在开发中,将来你可能需要做出调整。欢迎提供反馈并参与测试!

来源:GitHub 上的 wavelog/wavelog_worker

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 个字符的共享密钥

后续步骤

Wavelog 手册(中文版) / Wavelog Worker 0 字 0 行 bg8lng
2026-10-21T12:42:36.511788121Z 2026-10-21T12:44:13.196770968Z