Java有什么项目推荐的吗?pk功能设计
项目经历第四期。。。。。。项目经历第四期。。。。。。项目经历第四期。。。。。。
大家好,我是南哥。
一个Java学习与进阶的领路人,相信对你通关面试进入心心念念的公司有所帮助。
文章目录
- 直播pk功能设计
- pk玩法
- pk进度条
- pk匹配
- pk倒计时
- pk流程设计
- WebSocket长连接问题
1. 直播pk功能设计
1.1 pk玩法
直播pk的功能,要设计出来看起来容易,实则一点都不简单。直播pk玩法在抖音、虎牙、斗鱼各大平台都有出现,能帮互联网公司、主播赚不少钱。
南哥先说说pk的玩法是如何如何?它的流程是这样,主播点击申请pk按钮,匹配其他同时申请pk的主播,粉丝通过送礼给心爱的主播提高pk进度条,pk结束后失败的一方主播接受惩罚。但惩罚又有何妨呢,失败的主播也赚到收益了。
看看直播pk的大概界面。
1.2 pk进度条
pk进度条数据我们打算存储到高性能内存数据库Redis,这里使用Redis的Map结构,存储两个pk主播的进度条数据。
# Map的k-v结构
pk:progress:pk_id = [{主播A : 100}, {主播B : 90}]
但进度条数据主要是提供给在pk开始后才进来直播间的观众,这类人进行直播间后,客户端调用pk进度的查询接口,获取最新的pk进度条。
// 查询pk进度条接口
public Map<Object, Object> getPKProgress(String pkId) {
String pkProgressKey = "pk:progress:" + pkId;
return redisTemplate.opsForHash().entries(pkProgressKey);
}
而处于直播间的用户的进度条增加,我们给他设计为WebSocket数据实时推送,只要主播的进度有增加,把增加的数值推送到所有在pk直播间的用户。
但有个问题,如果刚进来的观众第一次进来直播间后,他获取了最新的pk进度。此时刚好某个主播的pk进度增加,但由于是新进来的观众,WebSocket数据推送不到这个最新用户,怎么办?
这涉及到数据一致性的问题!我们可以在用户进入直播间后,每隔一段时间调用以上的接口,获取pk最新进度条,进行数据纠正。
同时,在pk结束后,仍然要调用一次查询接口,确保不会出现这个情况:欸,主播你的分数明明比她高,怎么输了呢?这个情况还是数据不一致的问题。
1.3 pk匹配
主播点击pk申请按钮,我们把主播id与直播间信息加入到pk匹配池。
这个pk池子我们依然利用Redis,采用Redis五大基本数据类型之一:Zset。Zset的元素存储主播id与直播间id,元素的score存储主播的pk积分。那Zset会根据主播的积分进行顺序排序。
后面就是匹配算法的设计了,通过匹配算法 + Zset主播的积分,挑选出积分相近的两个pk主播进行匹配。
# Zset结构:
pk:matching_pool = [{anchor_id_1_room_id_1 : 100}, {anchor_id_2_room_id_2 : 110}]
南哥上面这几个关键数据结构都存储在Redis,我们要保证Redis的高可用性。那用Redis集群可以吗?
如果采用这种Redis架构,因为Redis集
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!