浅析鹅鸭杀中服务端的技术实现和要点

2023-05-16

在朋友的介绍下,我下载了这款游戏。由于之前玩过《Among Us》,我本以为这款游戏不会达到正宗的太空狼人杀的水平(毕竟是免费的)。但实际游玩后,我被它更加丰富的设定和玩法所吸引。接下来,我将简要分析一些该游戏功能的实现方式。

前置:游戏介绍

1、基础规则:平民为鹅,杀手为鸭子,在地图自由活动期间鸭子可以直接使用刀(武器)攻击人,刀人有冷却CD,鹅被刀之后会留下尸体。

2、鹅(好人阵营)发现尸体可以按R报警,之后所有人直接开会讨论,组织轮流发言讨论谁是鸭子(坏人阵营),发言完毕之后可以投票,让一名玩家出局。

3、在活动地图上面会有很多任务点,好人可以通过做任务来完成任务进度以取胜。鸭子可以做破坏任务来造成场面混乱,或者是做好人的任务混淆视听。

4、每个地图上都有一个公共报jing点(地图上小喇叭位置),玩家可以通过到此处摇铃组织开会,开麦环节会进行讨论,点击herbert将凶手投出去。

5、胜利方式:所有坏人/鸭子出局,或所有任务完成,游戏结束鹅阵营获胜所有好人/鹅出局,游戏结束鸭子获胜。

6、除了鹅和鸭之外还可以有一些中立角色来平衡双方势力,中立角色的获胜方式具体由所选择角色来决定。(如呆呆鸟需要被公投出局来取胜) 为自己打工!

1. 登录、房间

       鹅鸭杀拥有一个有趣的设定:当玩家登录后设置语言时,同时也会设置地区。此时,匹配查询到的房间也会是同地区的。这意味着鹅鸭杀的登录架构是全球同服的,根据不同地区的网络路由到尽量近的登录服务,并且数据存放在一起。
       在按照类型搜索房间时,玩过鹅鸭杀的玩家可能会注意到一个明显的感觉:在同一个房间内,如果玩家不准备,那么他们更容易被推荐和进入。此外,等级低的玩家创建的房间往往比高等级玩家创建的房间进入速度慢。
       对于每个玩家搜索到的房间,都是按照人数从多到少进行排序的。以上这些都是排序规则的实现方式。

2. 语音范围

鹅鸭杀中,玩家发言只能让周围的玩家听到,如果被鹈鹕吃掉或者隔墙,又有不同的规则。这个实现原理比较简单,假如设置音频接收距离的最大范围为 R,若发声者离收听者的距离为 r,则:

  • 当 r < R 时,表示发声者在正常范围内,收听者可以听到声音;

  • 当 r ≥ R 时,表示发声者超出了最大范围,收听者无法听到声音。

    image.png

3. 动作判定和避免外挂

      这类游戏通常采用长连接技术,即用户每个动作都实时发送到服务器,由服务器广播给每个玩家其他玩家的操作和系统通知。这一过程中,游戏采用类似LOL的反外挂机制,即由服务器计算动作并计算结果后再广播给每个玩家。不同视野和角色会接收到不同的消息。举个例子,当网红角色死亡时,网红玩家会收到死亡消息并展示相应的动画,其他鹅玩家会接收到死亡提示,但鸭子和中立玩家则不会接收到任何消息。这种机制确保了无论外挂如何介入,都无法窃取和改变消息。

4. 限流

156611672837595_.pic_hd.jpg
    最近,晚上 8 点以后,鹅鸭杀客户端的网络情况会变得有些卡顿。虽然一开始可能会认为这是加速器出现问题,但重启游戏后会发现系统提示“Rate exceeded”。这是由于玩家数量过多,超过了服务器承压上限,无法满足所有请求,最终拒绝服务。 鹅鸭杀为此做了大量准备,对服务的网络和性能进行了相对完善的压力测试。当玩家数量和请求压力超过阈值时,采用动态拒绝请求的策略,以确保已开局的玩家的游戏质量。

5. DDOS 攻击

2023.1.10 日上午,鹅鸭杀官方于Steam论坛上发布了公告,公开其服务器自2022年12月14日以来被断断续续的 DDoS 攻击,DDoS攻击在今年一月份开始变得更加强大,从最开始影响服务器语音和流畅度直到导致了本次服务器的瘫痪。
image.png

什么是 DDoS 攻击?

拒绝服务 (DoS) 攻击是一种恶意尝试,旨在影响合法最终用户对目标系统(如网站或应用程序)的可用性。通常,攻击者会生成大量数据包或请求,最终使目标系统不堪重负。而DDos,则是分布式的拒绝服务。

DDOS的攻击成本是很高的,一般很小的企业和没有影响力的应用,很难被盯上。但像鹅鸭杀这样突然火爆的游戏,是一定有“友商”、“同行”来找麻烦的。因为成本高的背后,是需要更高成本地进行防护。

DDOS的防护原理是这样的:使用前置服务器(超大规模)来吸收和缓解攻击,通过算法过滤僵尸请求,将正确的用户请求转发给后台服务器。核心就是区分正常和异常流量,这需要非常高的网络安全技术水平。像阿里云的高防,都是与运营商进行深度合作的,能够在第一时间封禁IP和网络请求。

在经历了长时间的维护更新后,《鹅鸭杀》官方今天早上(1月12日)宣布服务器已重新启动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅析鹅鸭杀中服务端的技术实现和要点 的相关文章

  • SNMPv3原理-SNMPv3协议框架

    1 SNMPv3的体系结构 SNMPv3定义了新的体系结构 xff0c 并在其中包含了对SNMPv1和SNMPv2c的兼容 xff0c 即这个新的体系结构也适用于SNMPv1及SNMPv2c xff0c 弥补了SNMP没有完整体系结构的缺点
  • MBR与GTP

    现有的PC机架构 xff0c 是沿用了数十年的主板BIOS 43 硬盘MBR分区的组合模式 随着不久的将来 xff08 2009年 xff1f xff09 硬盘容量突破2TB xff0c BIOS xff0b MBR组合估计会被主板EFI和
  • R6002-floating point not loaded 的问题解决方法 .

    最近项目的要计算浮点数据 xff0c 为了调试方便 xff0c 输出计算结果值到DEBUG信息 xff0c 结果却出现 R6002 错误 Google了一下 xff0c MSDN上对于R6002的描述信息是 xff1a 错误消息 未加载浮点
  • KVM修改虚拟机配置

    1 修改内存或 CPU 编辑虚拟机配置文件 xff1a root 64 controller virsh edit centos2 如 xff0c span class token tag span class token tag span
  • 调试笔记之观察中断

    调试笔记之观察中断 中断好比计算机系统的脉搏 xff0c 是系统生命力的源泉 在WinDBG做内核调试时该如何观察系统的中断分配和响应情况呢 xff1f WinDBG的帮助文件对此描述甚少 xff0c 已经有的几个重要扩展命令居然也没有出现
  • 活动目录域控制器端口

    活动目录域控制器端口 域成员与域控之间通讯需要开放什么端口 xff0c 除了LDAP389 139 445 DNS21 xff0c 还有其他吗 xff1f 回答 xff1a 根据您的描述 xff0c 我对这个问题的理解是 xff1a DC和
  • Apollo编译卡死问题

    最近在研究apollo xff0c 按照他们官方教程下载安装后 输入下面命令开启并进入docker bash docker scripts dev start sh bash docker scripts dev into sh 然后就进入
  • docker服务器的图形显示方案

    问题描述 xff1a 一般docker实操时都是作为服务器 xff0c 以字符方式交互 xff0c 非常不方便 本人尝试各种图形解决方案 xff0c 最终找到完美方案 最初本人尝试过VNC和SSH方式 xff0c 最终被否定了 1 本来do
  • Centos7下使用CMake

    在进行需要提供跨平台服务的项目时 xff0c 最好有相应的跨平台项目构建工具 本文所述的CMake即其中比较好用的跨平台构建工具之一 下文主要以C 43 43 语言为例进行使用演示 安装C 43 43 所需的环境 xff1a yum ins
  • 树莓派+神经计算棒2实时人脸检测

    树莓派配置摄像头 sudo apt get install python opencv sudo apt get install fswebcam 配置摄像头 sudo nano etc modules 查看树莓派CPU型号 cat pro
  • 学习总结-编写自己的CMakeLists.txt

    cmake minimum required span class token punctuation span VERSION span class token number 3 3 span span class token punct
  • 7.4V锂电池USB平衡充电器 串联锂电池充电器

    7 4V锂电池USB平衡充电器 串联锂电池充电器 本文介绍一种简单实用的串联锂电池充电器 大家知道 xff0c 串联电池的充电 xff0c 是一个麻烦的问题 如果直接拿7 4V来充 xff0c 可能会因为两颗电池的参数差异 xff0c 会导
  • 【Echarts】数据可视化完成大屏地图(拓展乡镇地区)的绘制

    绘制地图要素 地图边缘 地理位置 xff08 中心点或者自定义的未知 xff09 echarts绘制 实现在前 成品展示放在最后 代码太长 xff0c 参考代码可见Github Github地址 获取地图 获取精确到乡镇街道的地图JSON数
  • K8s问题【flannel一直重启问题,CrashLoopBackOff】

    kubectl describe 命令查看 Events Type Reason Age From Message Normal Scheduled 13m default scheduler Successfully assigned k
  • Python openpyxl库

    1 读写单元格 span class token keyword from span openpyxl span class token keyword import span load workbook wb span class tok
  • 子网掩码

    子网掩码 subnet mask 是每个网管必须要掌握的基础知识 xff0c 只有掌握它 xff0c 才能够真正理解TCP IP协议的设置 以下我们就来深入浅出地讲解什么是子网掩码 IP地址的结构 要想理解什么是子网掩码 xff0c 就不能
  • AS学习网址大全

    都是我在学习过程中精心收集的 xff0c 大部分为国内网站 xff0c 绝对是您学习AS最好的去处 本贴于2010年3月22日再次更新 xff0c 并新加了很多好的网站 1 同时将网址全都贴出来 xff0c 方便不想下载的朋友使用 2 附件
  • 紧耦合和松耦合有什么区别

  • 我的大一学习生活总结

    今天最后的一科英语考完了 xff0c 但此刻的我并不觉的轻松 xff0c 我知道从现在开始就标志着我的大一已经结束了 xff0c 在大学仅有的四年时光就过去了四分之一 回想起大一这一年 xff0c 自问一下我到底学到了什么 xff1f 我发

随机推荐

  • 阿里云导出raw文件如何还原查看及centos7系统密码破解

    1 Raw格式转换 1 1 格式介绍 目前阿里云ecs镜像文件的导出格式默认为 raw tar gz xff0c 解压后为 raw格式 raw为最原始的虚拟机镜像文件 xff0c vmdk是vmware Virtual Box的虚拟机镜像文
  • 5.33 综合案例2.0 -ESP32拍照上传阿里云OSS

    综合案例2 0 ESP32拍照上传阿里云OSS 案例说明连线功能实现1 阿里云平台连接2 OSS对象存储服务3 ESP32 CAM开发环境4 代码ESP32 CAM开发板代码HaaS506开发板代码 测试数据转图片方法 案例说明 使用ESP
  • 'grep' 不是内部或外部命令,也不是可运行的程序或批处理文件

    使用 grep 来过滤 xff1a adb shell pm list packages grep qq 然后就报了 39 grep 39 不是内部或外部命令 xff0c 也不是可运行的程序或批处理文件 xff0c 后来发现根本不是grep
  • 一个程序员的一生

    一个程序员的一生 作者 佚名 我在程序员的时候 xff0c 我一开始追逐这个API怎么用 xff0c 数据库SQL怎么写更优化 xff0c Dcom技术的细节 xff0c 然后我发现我写出来的产品为了符合客户 需求必须要大量修改 xff0c
  • 搭建Ubuntu Samba服务器(超简单)

    1 xff09 安装samba服务 sudo apt get install samba 2 xff09 配置samba sudo vim etc samba smb conf share comment 61 myshare path 6
  • Nginx-配置HTTPS证书(单向认证)

    目录 一 生成 CA 私钥 1 生成一个 CA 私钥 ca key 二 生成CA 的数字证书 1 生成一个 CA 的数字证书 ca crt 三 生成 server 端数字证书请求 1 生成 nginx 端的私钥 nginx key 2 生成
  • 数据结构—B+树

    1 约束 B 43 树的约束与 B 树类似 xff0c 一棵 m m m 阶 B 43 树具有如下特点 xff1a xff08 1 xff09 根节点要么是一个叶节点 xff0c 要么至少具有两个孩子节点 xff1b xff08 2 xff
  • 服务端三种方式实现单设备登录

    单设备登录 xff0c 顾名思义 xff0c 一个账号在一个app中只能在一个设备上进行登录 使用的场景例如 xff1a 账号多端登录时云存档的一致性问题 单设备登录常用的方法 xff1a 1 web端 xff0c session 43 c
  • go 管道简单入门及注意事项:管道创建,发送、接受数据,管道关闭

    1 使用make命令创建channel span class token comment 未设置缓冲区 xff0c 只能放一个 xff0c 不读取再次赋值则会阻塞 span c1 span class token operator 61 s
  • java 生成grpc调用service

    1 安装protoc 这里以mac为例 xff1a brew install automake brew install libtool brew install protobuf 检查 protoc version 2 下载protoc
  • go微服务框架Kratos简单使用总结

    Kratos是B站开源的一款go的微服务框架 xff0c 最近PS5上的 战神 诸神黄昏比较火 xff0c 主角就是奎托斯 这个框架的名字就取自他 在进行框架选型时 xff0c 对比了目前主流的很多go微服务框架 xff0c 如Zero x
  • Gradle重新安装后下载插件失败 Read timed out 问题解决

    究极大坑记录 在使用gradle进行构建kotlin项目时 xff0c 项目所用依赖版本需要同步升级gradle版本 升级gradle版本后 xff0c gradle相关插件无法下载 xff0c 反复timeout超时 症状如下 xff1a
  • Jenkins启动失败:Failed to start LSB: Jenkins Automation Server.

    启动systemctl start jenkins service提示 Job span class token keyword for span jenkins service failed because the control pro
  • 最新版 Let’s Encrypt免费证书申请步骤,保姆级教程

    最近将域名迁到了google domain xff0c 就研究了一下Let s Encrypt的域名证书配置 发现网上找到的教程在官方说明中已经废弃 xff0c 所以自己写一个流程记录一下 步骤方法官方文档见 xff1a https eff
  • git 加速代理设置,单仓库设置代理,指定仓库设置单独代理

    1 git全局设置代理 git config global https proxy http 127 0 0 1 7890 git config global https proxy https 127 0 0 1 7890 取消的命令 x
  • 软件系统设计细节,你不知道的13个实践经验!

    记录道具来源等的 source 字段时 xff0c 可以使用 xff08 类名 43 方法名 xff09 xff08 包名 43 方法名 xff09 的组合 xff0c 可以清晰地区分来源 并且可以灵活地增加新的渠道 动作 涉及金额 钱的字
  • 从typro到Obsidian

    使用了typro 3年有餘 xff0c 最近看到yukang的年終博客 xff0c 又一次提到了Obsidian這個軟件 很久沒有還編輯工具的我 xff0c 想要折騰一下 於是 馬上開始 xff01 第一步 xff0c 啥也不知道 xff0
  • C++线程

    1 创建线程 span class token macro property span class token directive hash span span class token directive keyword include s
  • OpenGPT的11种高效用法

    1 问答提示 2 解释复杂的概念 3 创作 创作需要尽可能的缩小范围 xff0c 提出具体的要求 xff0c AI会给出更好的答案 4 准备面试 5 教师教案 6 编码和集成 7 健身 8 送礼推荐 9 翻译 这个甚至不用去演示 xff0c
  • 浅析鹅鸭杀中服务端的技术实现和要点

    在朋友的介绍下 xff0c 我下载了这款游戏 由于之前玩过 Among Us xff0c 我本以为这款游戏不会达到正宗的太空狼人杀的水平 xff08 毕竟是免费的 xff09 但实际游玩后 xff0c 我被它更加丰富的设定和玩法所吸引 接下