ApexLecture 是一个简单实用的在线课堂直播平台,支持老师发起直播、学生观看课程、参与答题互动,并实现了基础的消息推送和数据记录功能。
- ✅ 直播推流:使用 WebRTC 实现音视频推送,支持直播和回放。
- ✅ 学生在线状态管理:通过连接状态记录学生是否在听课,可统计上课时长。
- ✅ 答题互动:支持选择题和判断题,学生作答后系统自动记录答题情况,并且会实时通过 push 将答题状态同步给老师。
- ✅ 实时聊天:学生和老师可进行简单文本交流。
- ✅ 消息推送:chat 和 quiz 消息通过 Redis 发布,由 push 服务通过 SSE 发送给前端。
- ✅ 异步入库:部分数据使用 RabbitMQ 异步入库,多次重试后,将消息丢入死信队列,后台重新放入队列,并且定期打印日志。
- ✅ 用户管理:支持用户注册、登录和身份校验。
- ✅ 可观测性:基于 ELK 集成日志系统,jaeger/Prometheus/opentelemetry 实现监控。
- ✅ 集成AI:基于 eino 框架实现了可爱问答女仆功能,可以随时与学生进行交互,理论支持智能纪要(智能纪要没测试过,语音识别那个crediential好像有点麻烦)。
- 后端框架:Hertz + Kitex
- 推流:pion/webrtc
- 大模型:eino
- 消息队列:Redis Pub/Sub + RabbitMQ
- 数据库:MySQL + Redis + MinIO(对象存储)
- 监控工具:Prometheus + Grafana + Jaeger
- 协程控制:使用 ants 协程池限制协程数量
- 限流:使用 sentinel-golang 实现限流
- 一致性哈希:直播推流依赖于内存,故基于一致性哈希算法,确保同一个房间的请求落在同一个直播节点上。
- 敏感词屏蔽:使用第三方库 sensitive 实现敏感词屏蔽
- 克隆项目到本地:
git clone https://github.com/Rinai-R/ApexLecture.git
git clone [email protected]:Rinai-R/ApexLecture.git
- 安装依赖:
go mod tidy
- 拉取依赖:
make up
- 启动服务:
make hz-run
make user-run
make lecture-run
make chat-run
make push-run
make quiz-run
make agent-run