本文引用的文件
本文件面向AI有声书生成平台的WebSocket服务,系统性阐述实时通信服务的实现架构与使用方式,覆盖连接管理、消息路由、断线重连、心跳检测、连接池管理、消息广播、私信发送、房间管理等能力。同时提供客户端WebSocket连接的集成示例、消息格式定义、事件处理与状态同步方案,并结合播放器状态同步、实时通知、多端协作等场景说明WebSocket的应用价值。
WebSocket服务在后端以独立服务模块形式提供,前端通过统一的WebSocket管理器封装连接、订阅、重连与消息处理逻辑。整体结构如下:
graph TB
subgraph "后端服务"
APP["应用入口<br/>app.ts"]
WS["WebSocket服务<br/>websocket.service.ts"]
PLAYER_CTRL["播放器控制器<br/>player.controller.ts"]
PLAYER_SVC["播放器服务<br/>player.service.ts"]
end
subgraph "前端应用"
WS_CLIENT["WebSocket管理器<br/>websocket.ts"]
AUDIO_STORE["音频状态存储<br/>audio.ts"]
end
APP --> WS
WS --> PLAYER_CTRL
WS --> PLAYER_SVC
WS_CLIENT --> WS
AUDIO_STORE --> WS_CLIENT
图表来源
章节来源
章节来源
WebSocket服务采用“升级+广播”模式:
服务端提供广播与定向推送能力,前端通过事件驱动进行状态同步。
sequenceDiagram
participant Client as "客户端"
participant Server as "HTTP服务器"
participant WSS as "WebSocket服务"
participant Clients as "连接池(Map)"
Client->>Server : "HTTP Upgrade 请求 /ws?clientId=..."
Server->>WSS : "交由WebSocket处理"
WSS->>Clients : "addClient(clientId, ws)"
WSS-->>Client : "connected 事件"
Note over Client,WSS : "客户端可发送订阅/取消订阅消息"
图表来源
服务初始化
initWebSocket(server)监听HTTP upgrade事件,校验路径为/ws,升级后写入clientId并发送connected事件。
classDiagram
class WebSocketService {
+addClient(clientId, ws) void
+removeClient(clientId) void
+sendToClient(clientId, event, data) bool
+broadcast(event, data) void
+pushAudioGenerationComplete(bookId, chapterId, status) void
+pushVideoGenerationComplete(bookId, chapterId, status) void
+pushBatchGenerationProgress(taskId, step, progress) void
+initWebSocket(server) void
}
class ClientsMap {
+Map~string, WebSocket~ clients
}
WebSocketService --> ClientsMap : "维护连接池"
图表来源
章节来源
消息格式
服务端与客户端均使用统一消息体:{ event: string, data: any }。
flowchart TD
Start(["开始"]) --> Connect["发起连接"]
Connect --> Open{"连接成功?"}
Open --> |否| Fail["失败回调/等待重连"]
Open --> |是| Sub["_subscribe 订阅事件"]
Sub --> Listen["监听消息"]
Listen --> Msg["解析消息并触发事件"]
Msg --> Close{"连接断开?"}
Close --> |是| Reconnect["重连流程"]
Close --> |否| Listen
Reconnect --> Max{"超过最大重连次数?"}
Max --> |是| Stop["停止重连"]
Max --> |否| Connect
图表来源
章节来源
服务启动后,WebSocket监听/ws路径,仅允许该路径的升级请求。
sequenceDiagram
participant Boot as "启动流程"
participant App as "Koa应用"
participant Server as "HTTP服务器"
participant WS as "WebSocket服务"
Boot->>App : "创建Koa应用"
Boot->>Server : "创建HTTP服务器"
Boot->>WS : "initWebSocket(server)"
WS-->>Server : "注册upgrade事件处理"
Boot-->>Server : "监听端口"
图表来源
章节来源
典型流程:前端播放器状态变化时,通过接口更新后端状态;后端可将播放进度变更通过WebSocket广播或定向推送至其他设备。
sequenceDiagram
participant FE as "前端播放器"
participant API as "播放器API"
participant DB as "数据库"
participant WS as "WebSocket服务"
FE->>API : "保存播放进度"
API->>DB : "upsert/insert/update"
DB-->>API : "返回最新状态"
API-->>FE : "返回结果"
Note over WS,DB : "可选:服务端将状态变更通过WS广播/定向推送"
图表来源
章节来源
前端WebSocket管理器依赖uni原生WebSocket API(H5/小程序)。
graph LR
Node["Node.js 环境"] --> HTTP["http.Server"]
HTTP --> WS["ws 库"]
APP["app.ts"] --> WS_SRV["websocket.service.ts"]
WS_SRV --> Clients["连接池 Map"]
FE_WS["websocket.ts"] --> UniAPI["uni.connectSocket"]
图表来源
章节来源
[本节为通用指导,无需列出章节来源]
章节来源
WebSocket服务为AI有声书平台提供了低延迟、双向通信的基础设施,支撑生成任务状态推送、播放器状态同步与多端协作。通过清晰的连接管理、事件订阅与断线重连机制,以及与播放器模块的协同,平台可在复杂场景下保持稳定与一致的用户体验。
[本节为总结性内容,无需列出章节来源]
播放进度同步
后端可将进度变更通过WebSocket广播至其他设备。
sequenceDiagram
participant Page as "播放器页面"
participant Store as "audio.ts"
participant WS as "wsManager"
participant API as "播放器API"
participant DB as "数据库"
Page->>Store : "播放/暂停/跳转"
Store->>API : "保存播放进度"
API->>DB : "upsert"
DB-->>API : "返回最新进度"
API-->>Page : "返回结果"
Note over WS,DB : "可选:服务端将进度变更通过WS推送"
图表来源
通用消息体
预置事件
章节来源
[本节为概念性扩展,无需列出章节来源]