看了许多直播优化的方案,写此文记录一下,涉及少分部服务端方案,不涉及具体代码。
具体方案分为三个部分:
1、直播大厅的优化。
2、直播间内的优化。
3、私信消息模块的优化。
直播大厅的优化:
直播列表的刷新
问题:
1、作为App的入口,其高可用性十分重要。
2、用户点击进入直播间后,发现直播已经结束,体验不好。
3、主播们的及时露脸、吸引粉丝的需求。
方案
1、多种刷新机制相结合
- 全量刷新。
- 顶部刷新,按滑动屏幕的偏移量。
- 局部刷新,对直播流进行分组,只更新用户当前界面的直播流,便于服务端实施缓存策略。
- 刷新的时间间隔可配置。
2、用户体验方面
- 用户当前正在滑动屏幕时,延迟刷新当前页面。
进入直播间速度的优化
常见现象:
1、用户点击某个直播之后,进入直播间页面较慢。
2、直播间内的视频迟迟加载不出。
3、主播开播后反映人气一直上不去。
原因分析:
1、获取视频流时建立网络连接的耗时。
2、直播间内业务模块众多,界面初始化耗时。
方案
- 在直播间大厅预先解析视频流地址,从而加快获取视频数据的速度。
- 对房间内部分UI模块使用懒加载方式,如:公聊、用户列表等。
直播间内的优化:
定时器事件调度
房间内长连接消息的处理(公聊消息列表刷新)
问题现象:
热门直播间大量的公聊消息使得列表持续快速刷新,导致主线程CPU占用较高,影响整体页面交互。
优化思路:
- 将处理长链接消息的SocketIO库中的block执行线程设置为非主线程,缓解主线程的CPU占用。
- 实时统计单位时间内收到的消息数目,在性能较低的机型上,动态调整公聊列表的刷新频率。
- 使用队列暂存消息,每条公聊消息到来时不直接刷新列表。
- 批量地pop队列中的消息,只保留最近收到的一些消息进行滚动刷新。
动画流畅
问题现象:
大量的礼物动画如何进行流畅的展示。
优化思路:
- 动画进行队列分优先级排列,对于同个时间段内的动画根据优先级高的的优先显示,其余可延迟或者抛弃动画显示。
主播端体验优化
问题现象:
主播直播了很久,好不容易上了热门,发生App崩溃如何处理。
优化思路:
- 开始直播时保存推流地址信息, App崩溃后,再次启动可以继续直播,恢复效果上相当于一次切后台的操作。
问题现象:
如何应对运营活动时的房间内消息压力,短时间内服务器广播消息压力非常大,公聊和礼物消息持续刷屏,主播直播严重受干扰。
优化思路:
- 服务降级,下发限制客户端公聊和礼物消息发送频率的命令。
- 限制点赞和部分礼物的动画展示
减轻服务端并发请求方面的优化
问题现象:
1、用户关注关系的拉取:每次进入直播间,都需要请求用户列表中的关注关系;主播结束直播时,用户都需要拉取和主播的关注关系。
2、推送消息:明星用户开播全量推送时,大量客户端同时拉取大厅直播列表。
优化思路:
- 对用户profile、关注关系等信息进行缓存。
- 收到直播推送时,不立即刷新直播列表,延迟到退出直播间后再启动大厅刷新机制。
客户端首次启动方面的优化
问题现象:
用户安装App后首次启动,点击登录按钮出现卡顿。
原因分析:
需要下载大量的图片资源,网络请求和文件操作频繁。
优化思路:
- 对部分礼物和等级图标资源进行内置,增量下载更新。
私信消息模块的优化:
问题现象:
私信聊天页面的打开速度和消息浏览的体验。
优化思路:
- 内存中只缓存少量的几十条数据用于展示,滑动屏幕浏览时,动态更新缓存内容。