duoaohui
|
5c638b0478
|
推广商用户数据权限
|
2026-05-24 23:44:28 +08:00 |
|
duoaohui
|
4878120723
|
视频会议
|
2026-05-24 02:37:30 +08:00 |
|
duoaohui
|
bf04114c99
|
视频会议
|
2026-05-24 00:00:56 +08:00 |
|
duoaohui
|
9b85c9c9e5
|
视频会议
|
2026-05-23 23:49:15 +08:00 |
|
duoaohui
|
7eaf448740
|
视频会议
|
2026-05-23 23:37:13 +08:00 |
|
duoaohui
|
981c12c5bb
|
视频会议
|
2026-05-23 23:04:10 +08:00 |
|
duoaohui
|
ba7447ddb9
|
视频会议
|
2026-05-23 22:42:26 +08:00 |
|
duoaohui
|
52c074e372
|
视频会议
|
2026-05-23 22:34:31 +08:00 |
|
duoaohui
|
c17cd836b2
|
视频会议
|
2026-05-23 22:16:40 +08:00 |
|
duoaohui
|
724bbcd309
|
视频会议
|
2026-05-23 22:10:44 +08:00 |
|
duoaohui
|
1a14b7ce70
|
视频会议
|
2026-05-23 22:07:36 +08:00 |
|
duoaohui
|
91c3bce0af
|
视频会议
|
2026-05-23 22:00:29 +08:00 |
|
duoaohui
|
b6fe8b227a
|
视频会议
|
2026-05-23 21:59:05 +08:00 |
|
duoaohui
|
50234db7a9
|
视频会议
|
2026-05-23 21:49:08 +08:00 |
|
duoaohui
|
fb7b0a8dde
|
视频会议
|
2026-05-23 21:45:47 +08:00 |
|
duoaohui
|
391508f1c8
|
视频会议
|
2026-05-23 21:42:49 +08:00 |
|
duoaohui
|
4cfc16b6e1
|
视频会议
|
2026-05-23 21:41:50 +08:00 |
|
duoaohui
|
94b05ff181
|
视频会议
|
2026-05-23 21:36:29 +08:00 |
|
duoaohui
|
9df92977fd
|
视频会议
|
2026-05-23 21:35:46 +08:00 |
|
duoaohui
|
c118ac43f5
|
视频会议
|
2026-05-23 21:29:29 +08:00 |
|
duoaohui
|
a8db973411
|
视频会议
|
2026-05-23 21:26:52 +08:00 |
|
duoaohui
|
ea7cd1edbd
|
视频会议
|
2026-05-23 21:23:41 +08:00 |
|
duoaohui
|
55f678bd40
|
视频会议
|
2026-05-23 21:12:51 +08:00 |
|
duoaohui
|
69efb8e498
|
视频会议
|
2026-05-23 20:43:39 +08:00 |
|
duoaohui
|
ea1fbde7a2
|
视频会议
|
2026-05-23 20:36:15 +08:00 |
|
duoaohui
|
7402e72c08
|
视频会议
|
2026-05-23 19:54:21 +08:00 |
|
duoaohui
|
d45d6d9d4e
|
视频会议
|
2026-05-23 19:44:00 +08:00 |
|
duoaohui
|
2568f15bda
|
视频会议
|
2026-05-23 18:55:47 +08:00 |
|
duoaohui
|
39594388e3
|
视频会议
|
2026-05-23 17:57:26 +08:00 |
|
duoaohui
|
3e56a6c3db
|
视频会议
|
2026-05-23 17:51:35 +08:00 |
|
duoaohui
|
759ddb513d
|
视频会议
|
2026-05-23 17:15:19 +08:00 |
|
duoaohui
|
63c799c921
|
视频会议
|
2026-05-23 15:26:40 +08:00 |
|
duoaohui
|
3772b763c1
|
视频会议
|
2026-05-23 15:18:57 +08:00 |
|
duoaohui
|
2e66717932
|
视频会议
|
2026-05-23 14:15:19 +08:00 |
|
duoaohui
|
2689301721
|
视频会议
|
2026-05-23 12:53:30 +08:00 |
|
duoaohui
|
3e6ddb0e02
|
视频会议
|
2026-05-23 12:19:10 +08:00 |
|
duoaohui
|
6347fdd2db
|
视频会议
|
2026-05-23 09:35:03 +08:00 |
|
duoaohui
|
4c9f462ff1
|
视频会议
|
2026-05-22 11:16:10 +08:00 |
|
duoaohui
|
23a74f737e
|
视频保存
|
2026-05-19 17:21:40 +08:00 |
|
duoaohui
|
b8c2bf2dc4
|
视频会议
|
2026-05-18 23:13:59 +08:00 |
|
duoaohui
|
ac8ec4c903
|
视频会议保存
|
2026-05-18 19:42:55 +08:00 |
|
|
|
315884685f
|
更新 frontend/src/utils/mediasoup-client.js
|
2026-05-16 21:15:39 +08:00 |
|
|
|
45c0852a36
|
更新 frontend/src/utils/mediasoup-client.js
|
2026-05-16 21:12:21 +08:00 |
|
|
|
fce4a49971
|
更新 frontend/src/utils/mediasoup-client.js
|
2026-05-16 19:59:28 +08:00 |
|
|
|
6c0491bf7d
|
更新 frontend/src/utils/mediasoup-client.js
|
2026-05-16 19:38:19 +08:00 |
|
|
|
ec56cc4dd1
|
更新 frontend/src/utils/mediasoup-client.js
|
2026-05-16 19:11:35 +08:00 |
|
|
|
8292bf86e4
|
更新 frontend/vite.config.js
|
2026-05-14 20:40:04 +08:00 |
|
|
|
3b8cb6c274
|
更新 frontend/vite.config.js
|
2026-05-14 19:07:22 +08:00 |
|
bujinyuan
|
c35097a0d8
|
fix(meeting): Task 16 修复 code-reviewer 审计 P2 七项 + Nit 七项
覆盖 Phase 2e-2 代码审查报告(docs/reviews/2026-04-23-phase2e-2-code-review.md)
P2/Nit 收尾批次,均在本仓库完成闭环;剩余 5 项登记推迟至 Phase 2f/3。
===== P2 七项 =====
- P2-1 cleanupUserResources 补 transport 清理
· media-server 新增 DELETE /internal/v1/transports/:id + transport.service.closeTransport
· Go MediaOrchestrator 接口新增 CloseTransport;HTTP 实现按 doCloseRequest 走 4xx 幂等 + 指数退避
· meeting_signal_service.cleanupUserResources 新增 "transport:<id>" 分支
- P2-2 preview.vue 快速切设备竞态
· previewSeq 序号 + nextTick 后 stale 判断,丢弃过期结果
· onVideoChange/onAudioChange 走 scheduleRestartPreview 200ms 防抖
· onBeforeUnmount 清理 changeDebounceTimer
- P2-3 room.vue onLoad redirectTo 后补 return
· 引入 redirectingToJoin 守卫,跳转页不再执行 onMounted 初始化
- P2-6 generateUniqueRoomCode 重试上限监控
· 重试后成功:Warn 日志(码空间健康度告警)
· 重试耗尽:Error 日志 + ErrRoomCodeConflict
· 修正 logs.Error 调用签名(去掉多余的 nil)
- P2-7 SendChatMessage 服务端长度 + 频率限制
· 新增 ErrChatContentEmpty / ErrChatContentTooLong / ErrChatRateLimited
· utf8.RuneCountInString 校验 500 字符上限
· Redis INCR + EXPIRE 滑动窗口(30 条/60s,首次写入 EXPIRE 兜底)
· controller.handleError 映射为 HTTP 400
- P2-8 MEETING_ENDED_REASON_LABEL 覆盖复核
· 新增前端专属常量 MEETING_ENDED_REASON_KICKED + 文案
· store/meeting.js _onMemberKicked 使用常量
· 同步修复后端 OnWSDisconnect 硬编码 "ws_disconnect" → constants.MeetingLeftReasonDisconnect
- P2 已修 P2-1/2/3/6/7/8;P2-4(WS token 迁出 URL query)与 P2-5(Chat 服务拆分)登记推迟
===== Nit 七项 =====
- Nit: kind:id 解析改用 strings.SplitN
· cleanupUserResources / pushExistingRoomState 两处同步
- Nit: resourceTTL 中央化
· 新增 constants.MeetingResourceTrackTTLSeconds(3600)
· meeting_signal_service.go resourceTTL 由 const 改 var 并引用常量
- Nit: ws/handler.go CheckOrigin 白名单
· NewHandler 新增 serverCfg 依赖;checkOrigin 支持同源放行 / dev 模式放行 / release 模式白名单严格匹配
· config.ServerConfig 新增 WSAllowedOrigins(逗号分隔)+ AllowedOrigins() / IsRelease() 辅助方法
· provider.go 新增 provideServerConfig,wire_gen.go 同步
- Nit: http_media_orchestrator.go 超时 + CreateRouter 重试
· 默认 TimeoutMS 5000→10000ms 兼容 Worker 冷启动
· 新增 CreateRouterRetry(默认 1 次,300ms 退避),仅对非 404 错误重试
· config.dev.yaml / config.docker.yaml 同步写入显式配置
- Nit: deploy-public.sh REDIS_PASSWORD × redis.conf 联动校验
· 检测 REDIS_PASSWORD 与 redis.conf 的 requirepass 配对一致性
· redis.conf 增加公网部署 requirepass 使用说明
- Nit: media-server internal-auth isPrivatePath 按 path 匹配
· 剔除 query/hash 后再与白名单 startsWith,避免 "?" 语义混淆
- Nit: mediasoup-client.js in-flight 锁走读确认
· finally 分支已覆盖 resolve/reject 两路,追加注释强化语义
- Nit 走读复核:_onMemberLeft 整槽关闭 vs _onProducerNew(closed=true) 精确匹配 producerId
· 粒度正确,无需改动(登记结论)
===== 构建验证 =====
- go vet ./... / go build ./... 通过
- frontend npm run build:h5 通过(仅 uni-app legacy warning,无 error)
- media-server npx tsc --noEmit 通过
===== 审查追踪小节 =====
docs/reviews/2026-04-23-phase2e-2-code-review.md 追加 "Task 16 修复追踪(2026-04-24 更新)":
- 已修复一览(本批次 14 处 + 历次 commit cdaa39d / ea2bf96 / f5ae095 / 5ed14c2)
- 推迟登记表(P2-4 / P2-5 / 端口收敛 / appData 校验 / RFC3339 时间格式,共 5 项)
Made-with: Cursor
|
2026-04-23 17:45:03 +08:00 |
|
bujinyuan
|
f5ae095033
|
fix(meeting): Task 16 会议销毁路径资源清理专项
前端修复:
- _onRoomEnded 保留结束页数据,新增 exitEndedRoom() 动作
room.vue onUnload 在 ENDED 状态调用,释放 currentRoom / participants / chatMessages 等 pinia state
- endMeeting() API 成功后立即触发 _onRoomEnded 本地兜底,不再依赖 room.ended 广播
避免 API 成功但 WS 抖动导致 engine / timer / AudioContext 泄漏
- 新增 _pendingBroadcastTimers 集合收纳 _broadcastSelfState 的 setTimeout 句柄
_cleanupMedia 统一 clearTimeout,避免会议结束后 stale 重试逻辑排队
后端修复:
- MeetingLifecycleService.OnRoomEnded 统一生命周期收尾
取消 graceTimers / emptyTTLTimers + Pipeline DEL host_grace / empty_ttl / 两个 handling 锁 key
- EndRoom 事务提交后遍历 activesBefore 调 cleanupRoomRedisResidual
批量 DEL 每个前任活跃成员的 resourceTrackKey + memberStateKey
补调 lifecycleSvc.OnRoomEnded 清理自身 timer + keys
- HandleEmptyRoomExpired MarkEnded 后补调 cleanupRoomRedisResidual + 清 host_grace 残留
验证:go vet + go build + npm run build:h5 全部通过
Made-with: Cursor
|
2026-04-23 17:12:38 +08:00 |
|