久游网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 107|回复: 1

【GAMES104】19.网络游戏的进阶架构

[复制链接]

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-9-22 13:50:26 | 显示全部楼层 |阅读模式
位移同步

内插值和外插值

内插值
平滑移动
但是可能加剧延迟


外插值
根据现有数据,预测状态插值
Dead Reckoning,航空航海概念,航位推算,根据现有数据,推算航位
Projective Velocity Blend 算法
外插值问题:
碰撞问题:外插值导致2个对象互相穿插,然后物理引擎给了一个很大的力,把2个对象推开,表现又很不符合现实
这个情况怎么处理?
快要碰撞的时候,马上转给物理系统处理?hard to detect
一般载具的移动可以用外插值


外插值和内插值混合使用
人在载具上
命中判定

由于延迟和插值,导致我们看到的客户端落后于其他玩家的客户端,这种时候,我们怎么做命中判定呢?


Hit Registration

达成一个共识,要么客户端决定,要么服务端决定
战地3:客户端命中检测
CSGO:服务端命中检测


客户端命中检测
客户端做位置的命中检测,发送服务端
服务端做简单验证:开枪点、命中点,检测起始点和终点是否有障碍物
客户端命中检测,射击手感比较好
但是比较容易被做外挂
Lag switches,客户端直接把网断了,敌人杀了,再把网接上?!!


服务端命中检测
客户端不知道敌人的真实位置,手感很差,怎么处理?
延迟补偿(Lag Compensation):在服务端计算弹道的时候,根据延迟,在 RewindTime 之前进行模拟弹道
延迟补偿的条件:要有快照,才能把世界复原到 RewindTime 之前
补偿时间计算:RewindTime = Current Server Time - Packet Latency - Client View Interpolation Offset



服务端命中检测时序图

一些没解决的问题:

  • 掩体问题:

    • 我已经躲进掩体,但是开枪的人的视野,我还在掩体外,然后被他打死了
    • 我从掩体探头,网络延迟下,我有视野优势

缓解延迟的感受方法


  • 前摇
  • 客户端命中反馈,预测特效
MMORPG 网络架构


  • Mazewar(1974) 第一款网络游戏
  • Multi-User Dimension(1978)
游戏子系统


  • 玩家管理系统
  • 匹配系统
  • 教育系统
  • 社交系统
  • 数据存储


Link Layer


  • 登录服
  • 网关

    • 隔离内外网
    • 拦截攻击
    • 玩家链接的加密、解密、压缩、解压缩



大厅

可能会有一堆人,会有性能压力
角色服务器


  • 账号信息
  • 角色信息
  • 背包数据
  • 邮件数据
  • 等等
交易系统


  • 保证原子性和安全性,可以回滚操作
社交系统


  • 聊天
  • 邮件
匹配系统


  • 技能
  • 等级
  • 延迟
  • 等待时长


数据存储


  • 关系数据库:MySQL

    • 常驻、灵活查询
    • 比如玩家数据、游戏数据、道具商店、交易

  • 非关系数据库:mongoDB
  • 内存数据库:redis









分布式系统

同一个服务拆分成多个,要考虑的问题:

  • 访问死锁问题
  • idempotence 幂等性,冗余消息的话,不会出现异常
  • 服务挂掉的话,不影响整体逻辑
  • 网络不安全
  • bug会在分布服务内震荡,被扩大
  • 业务处理一致性,不同拆分服务得到的结果一致
好处:

  • 负载均衡
一致性哈希
把服务器和玩家用哈希算法散步在[1,2的32次方)上,然后要请求玩家信息,就按顺时针去找server(这个具体算法没讲,难不成是遍历?)


删掉一个server的情况


带宽优化


  • 游戏状态数据大小
  • 更新频率
  • 玩家数量
数据压缩


  • 浮点数压缩

    • 选择合适的浮点数精度,可以优化数据量
    • 对地图进行分区,然后人物移动的时候,使用相对位置




  • 分区域数据下发

    • 把地图分块,只同步分块的状态同步

AOI(Area Of Interest)

同步范围
Direct Range-Query
直接计算距离
不适合数量多的情况,比如MMORPG,1000个玩家在一块地区,按每秒tick20次,1000个玩家互相请求的时间复杂度就是1000*1000*20 每秒



直接计算距离

Spatial-Grid
传统艺能:画格子
100m*100m画格子,根据项目去定制格子大小
优点是请求速度快
缺点
格子的划分很重要:格子太小的话,就会有大量的内存占用;格子太大的话,每个格子的对象就很多,效果没达到
有的对象有多样的同步范围?




Orthogonal Linked-List 十字链表法
初始化:把游戏对象降维,在x轴排个序,在y轴排个序
改:对象移动,事件驱动进行列表数据更新
查:只要分别在x列表和y列表找到2个集合,然后求交集就是我们要的对象列表




Potentially Visible Set(PVS)


服务端像个快递公司,把包裹发给一个个客户端


反作弊

多样作弊方式


  • 游戏代码修改

    • 修改内存
    • 破解客户端

  • 软件注入

    • D3D渲染接口重载:画线框
    • 模拟鼠标键盘输入

  • 网络包拦截

    • 发假包
    • 修改包数据



修改内存

比如Cheat Engine,锁血,找到指定内存地址,锁定这个地址
解决方案:包体加固,代码混淆加密、内存混淆
说是加固的方案都被人破解了,我怀疑是加固公司赚2份钱
修改本地文件资源


  • 比如透视

    • 把墙体做成透明材质
    • 把人物做成发光材质

  • 解决方案:本地文件使用上传hash值,服务端校验
网络包拦截

网络包加密:非对称加密,速度比较慢,成本比较高
软件注入


  • Valve Anti-Cheat
  • Easy Anti-Cheat
  • 韩国作弊是犯法的?
AI作弊

深度学习,训练模型
模拟鼠标输入
这也太屌了吧!
构建一个可伸展的世界



Zoning-无缝区域


  • 区块
  • 实例
  • 镜像


四叉树划分地图,这块没有听懂···




Ghost Entity




镜像
回复

使用道具 举报

1

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 4 天前 | 显示全部楼层
确实不错,顶先
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|久游网

GMT+8, 2025-4-18 16:02 , Processed in 0.090298 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表