相比游戏客户端,游戏服务端开发无关紧要吗

简介: 感觉游戏服务端,除了更新,保存数据啊、生成随机物品啊、都没什么了,好像游戏开发场景中,服务端已经无关紧要了。看着客户端忙成狗,正在摸鱼的你是否也有过这样的疑问?

为什么有游戏服务端

因为有需求,我们需要解决需求。
需求一:在家里的电脑打完这一关,去朋友家的电脑上玩,又要重新打一遍。有一个地方存储数据和关卡状态该多好。
需求二:一直都是一个人玩,好希望和朋友一起玩啊。有中转的电脑,转发玩家的操作、状态就可以了。
需求三:卧槽,这个人开挂,怎么一刀把我秒了,不公平,垃圾游戏,我不玩了。有校验玩家操作、反外挂、有裁判,维持公平和游戏性。

从上面的三个需求,可以抽象出游戏服务器的功能应该有如下几点。

  • 网络服务
    网络服务就是建立客户端与服务端之间的连接。
  • 玩家数据存取
    最常见的就是登录,登录的时候需要取玩家数据。存,一般有三种存储方式,用户下线时写一次 DB。第二种是定时写回 DB。第三种是重要数据立即回写,例如玩家打到一个比较稀有的装备,就应该立刻保存,避免突然宕机导致数据丢失。
  • 游戏逻辑计算
    逻辑计算,把以前单机时,前端的计算放到后端,这是为了防止作弊。
  • 玩家行为或状态变化的同步检测
    这块可以理解成玩家可以看到他视野范围内看到什么东西。

游戏服务器相比传统的互联网应用有如下特点。

  • 延迟敏感
  • 实时的高强度交互
    一般单次请求就会产生复杂逻辑,还有一些广播和同步,比如移动同步,这就是一个很大的压力,假设你在一个二十人左右的场景里面,你发出了 5 个移动包,表示它移动的方向产生改变,目标点发生的改变,那么这个消息量将放大二十倍。
  • 业务逻辑复杂,内部耦合度高
    因为延迟和敏感和高强度,那么在服务器维护状态就是一个必然的过程,这样就会导致它的逻辑比较复杂。比如你击杀一个怪物,可能它不仅仅是击杀一个怪物,还会触发一些任务的逻辑。
  • 变更频率高
    游戏服务器的幅度一般没有传统的互联网应用幅度大。端游时代还好,但是现在是手游时代,基本上是一周一个小更新,一月一个大更新,所以服务器的灰度和部署需求也在逐渐变高。

游戏模型发展史

第一代游戏服务器

初代目

初代目的游戏服务器就是一个进程单线程物阻塞,接收到玩家的消息后,按照一个消息队列来进行序列化。这种游戏的代表就是 78 年的 MUD 游戏 Multiple User Domain,文字网游的统称,没有图形,通常是在终端与玩家交互,全部用文字和字符画来构成。

第二代游戏服务器

第二代游戏服务
初代目由于承载能力的限制,衍生出了第二代游戏服务器,目的就是为了增加并发,开始使用了多线程多进程的模型,逻辑上也开始增加了分区分服的结构。代表作有《UItima》,中文名叫《创世纪》。

UItima

2000年,联众的休闲棋牌。

联众的休闲棋牌

在 2003 年年底,联众游戏世界的注册用户一度超过2亿,月活用户达1500万,中国网络棋牌游戏的绝对霸主,但是 2003 年下半年,腾讯公测 QQ 游戏大厅,功能与游戏门类与联众大同小异,QQ 游戏大厅不同在于,每次你的 QQ 好友在游戏大厅玩游戏时,他的头像下方就会显示他正在玩什么游戏,这个状态栏一点开,你就能跟他一起玩了,就这么一点小细节,让联众游戏世界和 QQ 游戏大厅的用户流量在一两年里发生了戏剧性的此消彼长。2006年,彻底败北的联众创始人辞职,之后他成为投资人,坚持只做腾讯不做的项目。

第三代游戏服务器 - 三层架构

三层架构

第三代游戏服务器就比较百花齐放了,首先就是当时流行的三层架构,抽出 Gate Server 的部分去负责网络 IO 连接的部分,然后 Gate Server 通过一个内部的网络 IDC 的专网跟游戏逻辑服务器之间交互,最后把用户数据的存储放到 DB Server 这一层。
总的来说,三层架构它的主要特点就是把网络 IO 和存储跟逻辑分离,这样可以对每一层进行扩展,增加服务的承载能力。QQ 游戏大厅就是比较典型的代表。

QQ 游戏大厅

第三代游戏服务器 - 服务器集群

服务器集群

这种架构前面同样也是有 Gate Server 这种接入型服务来处理外网连接,然后在游戏 world 里去处理游戏逻辑。它与三层架构不同的是,它会把通用逻辑抽取出来,例如登录、聊天、组队、工会等,放在独立的位置,通过 cluster 集群的方式提供这种游戏服务,调用者通过调用函数来获取对应的功能。大部分的 MMO-RPG(MMO:Massive Multiplayer Online,大型多人在线游戏) 、RPG(Role Playing Game:角色扮演) 游戏都是这种结构。
这种方式,中间肯定就多了一些异步的交互,异步交互就会带来状态维护的问题,开发难度也随之提高。代表游戏有《地下城与勇士》。

地下城与勇士

第三代游戏服务器 - 无缝地图

无缝地图

这个类型的游戏,最大的代表游戏就是《魔兽世界》,相比以前的《传奇》类型的游戏,它切换地图的时候,客户端会明显的卡顿或者进入 loading 界面。无缝地图的特点就是玩家在游戏中移动时,会看到地图一直都在不停的加载,因为它的场景服务器只负责一部分场景,玩家移动到某个地方时,场景可能存在两个场景服务器上。这些场景服务器会由一个更高层的服务器来决策由哪台服务器加载场景。

魔兽世界

第三代游戏服务器 - 房间型

比较常见的游戏类型都会使用这种模型。它通常有一个大厅集群,它通常负责前面提到的 Gate Server 用户的接入,还有一些大厅的逻辑服务,例如 5V5 匹配,有多个玩家申请进游戏的时候,它会根据匹配规则,等级啊,玩家的技术啊来撮合两个队伍。然后,单局的过程会放到战斗集群,也叫做房间服务。代表游戏有腾讯的《英雄联盟》,《英雄联盟》把电竞行业也推到了一个前所未有的高度,想到以前高中和兄弟们一起开黑,真是快乐。

英雄联盟

核心技术和实现难点

游戏服务器技术跟客户端比较,客户端主要在用户交互和体验表现方面。而服务器则是要面对海量用户,十万到千万的 PCU,PUC 是游戏里面,用户数据的一个指标,Peak Concurrent Users 最高同时在线玩家人数,还有 DAU Daily Active User 每天登录过的用户,PCU 比较考量服务器的性能数据,DAU 更倾向运营数据。

稳定,服务器玩的时候不能宕机,还有就是容忍一些弱网络的问题,网络断了,允许他在短时间内 WIFI - 4G 的切换。

地图&视野同步,地图服务功能,服务器最常用的是九宫格技术,一块九宫格的内容,玩家在其中格,这个格往往比屏幕大一点,会收到这个格里面的内容,一般服务器会认为你在这个九宫格内,所有的玩家、怪物等都是你关注的对象,当你在一个格内移动时,视野是不会发生变化的,但假设移动跨格后,那么就认为玩家放弃了上一个九格宫中关注的内容,在客户端将不可见上一个格子中的内容,在服务器角度仍然可见。目的就是用户在移动的过程中比较平滑的加载数据,减少交互的数量。地图管理还包括一些动态阻挡,比如两个人走到同一个点,能够挤在一起还是重叠。还有就是静态阻挡,一个物件放置在那里,服务器要判断玩家能否走过去。移动中,主要问题还在延迟、拉扯、平滑、差值。

最后游戏中非业务的难点还有存储、缓存、反外挂、网络协议等。我根据目前我的技术栈来列举。如下。

在这里插入图片描述

目录
相关文章
|
4月前
|
IDE 前端开发 API
OpenSumi问题之OpenSumi 与 Theia 相比有什么优势
OpenSumi问题之OpenSumi 与 Theia 相比有什么优势
|
4月前
|
消息中间件 缓存 Java
如何优化大型Java后端系统的性能:从代码到架构
当面对大型Java后端系统时,性能优化不仅仅是简单地提高代码效率或硬件资源的投入,而是涉及到多层次的技术策略。本篇文章将从代码层面的优化到系统架构的调整,详细探讨如何通过多种方式来提升Java后端系统的性能。通过对常见问题的深入分析和实际案例的分享,我们将探索有效的性能优化策略,帮助开发者构建更高效、更可靠的后端系统。
|
6月前
|
缓存 监控 算法
构建高性能Java应用的秘诀
构建高性能Java应用的秘诀
|
7月前
|
缓存 移动开发 Android开发
构建高效Android应用:内存优化实战指南
【4月更文挑战第25天】 在移动开发领域,应用程序的性能至关重要。特别是对于Android设备,由于硬件配置的多样性,合理的内存管理与优化是提升应用流畅度、减少卡顿和崩溃的关键。本文将深入探讨Android应用的内存优化技巧,通过分析内存泄漏的原因、诊断工具的运用以及实际代码层面的改进措施,帮助开发者构建更加高效的Android应用。
|
7月前
|
移动开发 监控 Linux
构建高效安卓应用:内存优化实战指南
【4月更文挑战第11天】 在移动开发领域,尤其是安卓平台,内存管理是决定应用性能和用户体验的关键因素之一。本文将深入探讨安卓应用内存优化的策略与实践,从内存分配的基本机制到实际的代码级优化技巧,旨在帮助开发者构建更加高效、稳定且响应迅速的应用程序。通过分析内存泄漏的成因、内存抖动的影响以及合理的内存回收策略,我们展示了如何系统性地解决内存问题,确保应用在各种设备上均能保持最佳性能。
|
安全 数据安全/隐私保护 Android开发
三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能
众所周知,随着科技的发展和时代的进步,远程控制软件在日常工作中的运用所处可见,社会对远程控制软件的需求也在日益增长,为用户提供了便捷的远程访问和控制计算机的能力,使其在现代化社会中扮演着重要的角色。因此,市面上也出现了很多相似功能的产品,但是他们各有不同的特点和功能。本文主要介绍的是ToDesk、向日葵、TeamViewer三款远程控制软件间的不同之处,我将从安全、稳定、易用、兼容、功能几个方面来进行对比,帮助大家选择适合自己需求的远程办公软件。
342 1
三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能
|
消息中间件 存储 人工智能
深入了解IdleHandler,用来做优化或者轻量级任务都是极好的
IdleHandler 是 Handler 提供的一种充分利用CPU的机制, 主要是在 MessageQueue 出现空闲的时候被执行
|
机器学习/深度学习 分布式计算 并行计算
单机超越分布式?!强化学习新姿势,并行环境模拟器EnvPool实现速度成本双赢
单机超越分布式?!强化学习新姿势,并行环境模拟器EnvPool实现速度成本双赢
311 0
|
Web App开发 存储 JavaScript
尝鲜少代码高性能的Svelte框架
Svelte 是一种全新的构建用户界面的方法。传统框架(如 React 和 Vue)在浏览器中完成大部分工作,而 Svelte 将这些工作转移到构建应用程序时发生的编译步骤。通过本教程中,你将从头开始构建自己的应用,分别使用 Svelte -Cli 和 云开发平台
2183 10
尝鲜少代码高性能的Svelte框架
|
JSON Java 数据库连接
【关于开发工具的版本挑选问题】工具不是版本越新越好用,不要过于追求最新,好用性价比最高
【关于开发工具的版本挑选问题】工具不是版本越新越好用,不要过于追求最新,好用性价比最高
134 0
【关于开发工具的版本挑选问题】工具不是版本越新越好用,不要过于追求最新,好用性价比最高