1. 产品定位
EasyMeeting 是一款基于 Java 开发的即时会议与社交协作平台,旨在提供轻量级、低延迟的在线会议体验,同时融合即时通讯(IM)功能,满足用户从预约、入会到会后交流的全流程需求。
2. 核心业务模块
用户体系与社交关系
账号管理:支持用户注册、登录及个人信息维护。
好友/联系人系统:实现好友申请、审批、列表管理及状态同步,支持双向确认机制。
会议全生命周期管理
会议预约:支持创建预定会议,设置时间、主题及参与成员。
即时会议:支持快速发起会议,生成会议号或链接。
成员管理:实时管理会议中的加入、退出、角色变更(主持人/普通成员)及状态追踪。
实时互动与通讯
即时聊天:在会议期间或私聊场景下,支持文本消息的实时发送与接收。
信令交互:通过 Netty 处理 WebRTC 所需的信令交换,实现音视频流的点对点连接。
文件与资源管理
文件服务:支持头像、聊天记录附件等文件的上传与下载。
版本更新:提供客户端 APP 的版本检测与增量/全量更新包管理。
后台管理
系统配置:管理员可调整系统全局参数。
数据监控:查看会议记录、用户列表及系统运行状态。
3. 目标用户场景
企业内部日常站会、远程协作。
小型团队的项目沟通与文件共享。
需要即时建立连接的低延迟视频通话场景。
1. 技术栈选型
后端框架:Spring Boot + MyBatis。
通信协议:HTTP + WebSocket。
数据存储:MySQL (业务数据) + Redis (缓存)。
多媒体处理:FFmpeg (用于录屏转码截图处理)。
并发工具:SnowFlake, Redisson。
2. 核心架构设计
分层架构规范
Controller 层:统一继承 [ABaseController],实现全局异常处理和统一响应格式。
Service 层:业务逻辑封装,通过 Interface 与 Impl 分离,便于测试与维护。
Mapper 层:使用 MyBatis XML 配置复杂 SQL,配合 [BaseMapper]通用接口简化 CRUD 操作。
Entity 层:严格区分 PO (持久化对象)、DTO (传输对象)、VO (视图对象) 和 Query (查询条件),确保数据边界清晰。
即时通讯 (IM) 实现
Netty 集成:使用 `websocket.netty` 包构建高性能 WebSocket 服务器,处理长连接。
信道管理:通过 [ChannelContextUtils]管理用户 ID 与 Netty Channel 的映射关系,实现精准消息推送。
消息路由:定义多种消息类型 ([MessageTypeEnum]),如文本、信令、心跳等,通过 [ChatController] 、 WS 入口分发至对应处理器。
AOP 切面编程
全局拦截:利用 [GlobalInterceptor] 注解和 [GlobalOperationAspect] 切面,统一处理权限校验、日志记录、参数预处理,减少代码耦合。
缓存与一致性策略
Redis 组件:[RedisComponent] 和 [RedisUtils] 封装常用操作,用于存储用户 Token、在线状态、会议临时信息等高频访问数据。
分布式协调:使用 [RedissonConfig] 引入 Redisson,解决集群环境下的并发问题。
3. 关键流程实现亮点
鉴权机制:通过 Token 验证用户身份,结合 Redis 存储会话信息,实现无状态登录。
信令转发:后端不直接处理音视频流,而是作为信令服务器,转发 WebRTC 的 SDP 和 ICE 候选信息,降低服务器带宽压力。
异常兜底:全局异常处理器捕获 [BusinessException] 及其他运行时异常,返回标准化的错误码 ([ResponseCodeEnum]),提升前端对接效率。