游戏服务端架构演进

ops/2024/10/23 16:14:46/

文章目录

  • 前言
  • 初出茅庐
  • 粗通皮毛
  • 略有小成
  • 炉火纯青
  • 内劲深厚
  • 最后

前言

对于网络游戏,一般分为客户端和服务端,客户端主要负责界面图像的渲染与一些交互操作,服务端主要负责数据的业务处理与存储还有与客户端之间的信息交互

比如玩家聊天、广播通知、玩家修改名称等操作基本都需要一个游戏服务器充当消息的生产者、消息的消费者、消息的中转站

初出茅庐

武功初学者,刚刚开始涉足武学
在这里插入图片描述

对于每个在线的客户端,游戏服务器开启一个对应的线程进行相应的客户端连接数据的读写操作即网络通信、业务逻辑的处理、将运行中将玩家在线的一些信息保存在程序的内存中、或者将信息持久化地保存在文件中
主体流程是客户端通过与服务端之间建立的连接,进行请求数据包的发送,服务端接收到数据包后,对字节流的数据包进行拆包解析成程序内部可以使用的消息对象,然后调用该消息对应的处理函数进行业务处理,业务处理可以选择进行数据存储,也可以选择进行响应消息的封包转换成字节流,然后对客户端进行请求响应的写回等等

粗通皮毛

武功略知一二,未得精髓
在这里插入图片描述

使用内存结合文件的方式在用户量较小的情况下可以正常过运行,但是当玩家的体量逐渐庞大增长起来,对于数据存储的性能,数据库操作的需求变得更加复杂,需要一个结构化的数据存储结构,来高效的管理这些数据,这个时候我们就引入了数据库,通过数据库来完成数据的加工处理与存储

略有小成

武功修炼有了初步的成就
在这里插入图片描述

对于游戏来说一般实时性交互要求比较高,这个时候我们发现使用数据库之后还是会存在数据存储与数据检索上的瓶颈,这时我们可以考虑对于服务端加上一些缓存的机制,对于一些热点数据的检索优先在读写速度更快的缓存中查询,以提高查询效率,提供缓存数据定时持久化、异步批量持久化等操作保证数据的安全性

炉火纯青

武功已经非常熟练,技艺高超
在这里插入图片描述

随着游戏服务端业务逻辑变得复杂起来,我们可能需要支持更多的能力,比如玩家之间的聊天,消息广播推送等功能
首先我们每个线程只去处理了自身绑定的客户端连接,我们如果向其它在线的玩家进行通知可能需要进行跨线程的交互,这个时候我们先把客户端的连接抽成一个连接管理的模块,用于与客户端之间建立连接,并保存所有在线的客户端连接

其次这些操作其实更多的是想客户端连接中写入数据,这些功能主要是一个IO操作,我们有可能是向所有玩家进行消息推送,如果这个推送过程是在我们的业务逻辑中进行处理的话,可能会导致我们的业务逻辑处理的响应变得很慢,对于玩家的体验上也不友好,这个时候我们可以考虑使用一个广播模块进行异步的消息推送

内劲深厚

内功修为深厚,内力充沛
在这里插入图片描述

我们当前的游戏服务器架构受限于单台服务器的硬件性能的制约,如果当在线用户很庞大时,我们单台服务器可能无法处理大量的客户端请求,这个时候我们需要进行水平拓展,将业务功能分散到多台服务器中,目前更通用的做法是进行游戏分服,每个分服之间的数据隔离。然后我们将每个分服运行在一个服务器上,这样就是实现了游戏服务器的水平拓展,支持更大体量的客户端进行并发请求

当进行新开分服,或者说分服信息、分服服务地址调整时需要将分服待调整的内容同步到全局服务器的注册中心中
我们在用户登录到游戏中的时候会基于全局服务器进行分服服务器的选择
之后客户端的交互都是与分服服务器之间进行的,这样就按照基于分服这个机制进行了客户端的分片,每个分服服务器只需要处理好自己这个分片内的所有客户端连接即可

最后

我是醉墨居士,这此分享先到这,后面可能会在添加一些新的内容与功法,助力各位道友神功大成


http://www.ppmy.cn/ops/127861.html

相关文章

探索 Python Web 开发:从框架到爬虫

Python 是 Web 开发中广泛使用的编程语言,因其简单、灵活和强大的生态系统,适合构建各种类型的 Web 应用和 API。在本篇博客中,我们将讨论 Web 开发的几个重要主题,包括 Flask 和 Django 框架、API 开发、HTTP 请求处理以及网页爬…

宇宙汽车展览如何以创新性、个性化与便捷性,重塑汽车展示生态

一、汽车展示的创新性 元宇宙汽车展览通过运用虚拟现实以及3D建模等前沿技术,为观众呈现出一个高度沉浸式的汽车展示环境。在这里,汽车不再仅仅是静态的展品,而是成为了一个个生动、可交互的虚拟对象。观众可以自由地环绕汽车,全…

C++之《剑指offer》学习记录(2):sizeof

笔者最近在找工作时,无意间读到了一本名为《剑指offer》的书,粗略翻阅了一下,感觉这将会是一本能让我不再苦恼于笔试和面试“手搓代码”的书。故笔者写下该系列博客记录自己的学习历程,希望能和这本书的读者朋友们一起交流学习心得…

通过滑动控制 图片3d(多张视频序列帧图片) 展示

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>控制图片变化</title> <style>img {…

Python基础:20、Python基础综合案例

数据可视化 - 折线图可视化 数据可视化 - 地图 数据可视化 - 动态柱状图 1.json数据格式 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a;json就是一种在各个编程语言中流通的数据格…

时空数据时序预测模型: HA、VAR、GBRT、GCN、DCRNN、FCCF、ST-MGCN

HA (Historical Average) HA (Historical Average&#xff0c;历史平均模型) 是一种基础的时间序列预测方法&#xff0c;通常用于预测具有周期性或季节性规律的数据。它通过计算历史上同一时间段的平均值来预测未来值&#xff0c;假设数据会遵循某种周期性的变化模式。以下是对…

【ARM】MDK-Flex服务管理软件使用说明

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录MDK网络版部署工具Imtools.exe 的各个界面中相关配置的功能说明 2、 问题场景 解决客户咨询&#xff0c;该服务管理软件如何使用&#xff0c;为客户使用服务管理软件后期自行维护增加一定指导作用。 3、软硬件环…

Ajax处理错误信息(处理响应报文)

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body><form action""><div>用户名<input type"text" class"username"></div>…