当前位置: 首页 > article >正文

游戏之登录排队系统及防刷

前言
不管什么游戏,只要用户达到限制的上限或饥饿营销,都要用到排队系统
游戏的登录排队机制,其实就是 服务的限流 、削峰机制
为什么要限流
1>改善玩家体验,优化游戏的流畅度,减少玩家的卡顿延迟等
2>服务器承载力(带宽,CPU,IO,内存,UDB等等),需要考虑最优性价比
3>平滑流量波动,需要考虑新服与非新服 玩家人数差异,优化软硬件成本(云服务器有些资源不能更改或下降)
4>应对高并发情况 面对数百万级别的预约玩家,排队机制能够有效地控制开服初期的高峰流量
5>风险管控(鸡蛋不能都放到一个篮子里)防止外挂和恶意攻击,同理 ( 特别是单机服)

1:登录流程(这里以手游为例)
(1)手游一般通过SDK 到平台验证
(2)把平台返回的类TOKEN与类UID加渠道号 发送到登录/验证/账号 服务器,
(3) 登录/验证/账号服务器 去平台验证下,可以返回TOKEN 及附加信息
(3*)这步可有可无, 也可以发送服务器列表/列表的URL地址 /URL部分地址 (可以不由登录服务器返回,由请求其他服务完成)
(4)选服务器登录 (选择角色)(看游戏类型,这步可能也没有)
(5)登录gate 或 直接登录game srv

2:排队服(单独服务器)
1>如果MMO 建议放再 4 到5间,无需破环原来的流程,中间插入 一个排队服,前端 只需要多链接一次即可,不需要排队时,撤销即可
2>如果全区全服 还是一直要有排队服的,主要是的限流 、削峰,可以在登录前线排队,也可以放到登录后

3:登录优化
可以采用无状态服务器 处理 ,增强并发行
可以参考 加解密验证用户的合法性
问题:
1> 单位时间内,像 同服 发多次消息呢?
自己挤自己,这也可以的吧
2>如果是 不同服呢
可能需要以类试 redis这样,记录下 状态了,不同服 去redis查看状态,干挤就挤

4:消息防刷
1>增加流水号,
2>增加消息的数字摘要 (MD5,SHA等),一般MD5足够用了
3> 为了减少消息体量,数字摘要 可以取 中间部分 有个4-8位就够了(像MD5 32 TO MD5 16 一样)( MD5加密后的位数有两种类型:16位与32位,默认使用32位。16位实际上是从32位字符串中取中间的第9位到第24位的部分), 约定好就可以了
4>再加强版 就是 压缩了,前端过来的压缩(感觉真到这步,绝对是设计有问题了,代价需要这么大么)
5:防加速
(1):前端自行检测
请求网络时间或从后端得一个时间(N1),记录当前系统时间(C1),再记录一个流逝时间(D1)
任意时间检测 先获取一个流逝时间(D2),再获取当前系统时间(C2),再获取一个N2
设定一定范围 误差 ( O)
D2 -D1 > N2-N1 + ( O) 使用加速外挂了(加速齿轮,可以加速本地时间的流逝)
C2 -C1 > N2-N1 + ( O) ,本地时间被加速了
C2 -C1 >D2 -D1+ ( O) ,本地加速到了
(2)后端检查
检查消息的合理性

 可以增加内存日志系统(复盘用)
 可以参考  https://www.cnblogs.com/JefferyZhou/archive/2010/07/07/1773220.html

6:如果觉得有用,麻烦点个赞,加个收藏


http://www.kler.cn/a/446925.html

相关文章:

  • 数据结构_平衡二叉树
  • 常用Python自动化测试框架有哪些?
  • 【1.排序】
  • Layui table不使用url属性结合laypage组件实现动态分页
  • jmeter 接口性能测试 学习笔记
  • 题海拾贝:力扣 86.分隔链表
  • 电脑excel词典(xllex.dll)文件丢失是或损坏是什么原因?“xllex.dll文件缺失“要怎么解决?
  • flask-admin的modelview 实现list列表视图中某个列字段值翻译
  • C# 23种设计模式(5)命令模式(Command Pattern)
  • xterm.js结合websocket实现web ssh
  • 如何使用whisper+ollama+ffmpeg为视频添加中文字幕
  • Suno Api V4模型无水印开发「获取整首歌」 —— 「Suno Api系列」第5篇
  • 单片机MQTT通信
  • 阿里云pytorch gpu镜像下载!最快!!
  • 相机与NAS的奇妙组合,如何使用相机拍照自动上传或备份到NAS
  • LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS---正文
  • 分布式数据库 OceanBase 的前世今生
  • 文件解析漏洞
  • 使用 Dash 构建交互式数据可视化应用
  • Android -- 双屏异显之方法二
  • 从代币角度介绍solana账户体系
  • leetcode之hot100---54螺旋矩阵(C++)
  • 华为OD --- 流浪地球
  • Golang uint 类型溢出问题
  • LLaMA-Factory 单卡3080*2 deepspeed zero3 微调Qwen2.5-7B-Instruct
  • 2023年西南大学数学建模C题天气预报解题全过程文档及程序