C++游戏(大型PC端枪战游戏)服务器架构
实习期间深入参与到某大型pc端枪战游戏的后端开发中,此游戏由著名游戏工作室编写,代码可读性极高,自由时间对游戏后台代码进行了深入研究,在满足自身工作需要的同时对游戏后台的架构也有了理解,记录在此,以便学习。
根据功能层次可大致划分为应用层(逻辑层)、通用方法层、编包层(数据统一)、通信层(TCP连接)
以上为个人总结与理解
以下是准确的架构表。
| 层次 | 功能 | 约束 |
| 逻辑层 | 实现更具体的业务逻辑 | 能调用所有下层代码,但应主要依赖接口层 |
| 实现层 | 对各种具体的通信协议、存储设备等功能的实现 | 满足下层的接口层来做实现,禁止同层间互相调用 |
| 接口层 | 定义了各模块的基本使用方式,用以隔离具体的实现和设计,从而提供互相替换的能力 | 本层之间代码可以互相调用,但禁止调用上层代码 |
| 工具层 | 提供通用的 C++ 工具库功能,如 log/json/ini/日期时间/字符串处理 等等 | 不应该调用其他层代码,也不应该调用同层其他模块 |
| 第三方库 | 提供诸如 redis/tcaplus 或者其他现成功能,其地位和“工具层”一样 | 不应该调用其他层代码,甚至不应该修改其源码 |
如果希望业务数据的协议包,能自动化的成为编程中的对象,那么在处理消息体这里,需要一个可选的额外层次,用来把字节数组,转换成对象。
| 输入 | 层次 | 功能 | 输出 |
| Data | Transport | 通信 | Buffer |
| Buffer | Protocol | 分包 | Message |
| Message | Processor | 分发 | Object |
| Object | 处理模块 | 处理 | 业务逻辑 |
C++游戏(大型PC端枪战游戏)服务器架构的更多相关文章
- 类似于QQ游戏百万人同时在线的服务器架构实现
http://blog.csdn.net/sodme/article/details/213995 —————————————————————————————————————————————————— ...
- 职业定位(Web前端、后台、PC端)
Web前端 Web前端开发工程师:http://baike.sogou.com/v18499271.htm WEB前端开发面试题集锦:http://wenku.baidu.com/view/47bbc ...
- 第二期,问道PC端游戏免安装,下载即可体验
最近 迷恋游戏搭建不能自拔.搭建过 手游梦幻诛仙,传奇等等. 今天还是推荐PC端的问道这款游戏,原因是个人投入修改的时间太多了.基本完善了好多.这还得感谢这都是论坛的各位大佬体验的结果. 原来这个游戏 ...
- pygame开发PC端微信打飞机游戏
pygame开发PC端微信打飞机游戏 一.项目简介 1. 介绍 本项目类似曾经火爆的微信打飞机游戏.游戏将使用Python语言开发,主要用到pygame的API.游戏最终将会以python源文件gam ...
- windows8安装xna4.0不能开发Xbox和PC端游戏的解决办法
vs2012安装wp8后,只能开发手机端的xna游戏程序,没有xbox和pc端的,看来官方是不打算更新了,不过我们还是有办法的. 前提条件下,您得安装了vs2010和xna4.0 game studi ...
- QQ游戏百万人同时在线服务器架构实现
转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...
- 带你使用h5开发移动端小游戏
带你使用h5开发移动端小游戏 在JY1.x版本中,你要做一个pc端的小游戏,会非常的简单,包括说,你要在低版本的浏览器IE8中,也不会出现明显的卡顿现象,你只需要关心游戏的逻辑就行了,比较适合逻辑较为 ...
- 一个3D的多人在线游戏, 服务端 + 客户端 【转】
最近学院组织了一个实训,要求是利用Socket通信和D3D的知识, 写一个多人在线的游戏, 服务端是在linux下, 客户是在Windows下: 写这个的目的是想让大家给我找错, 欢迎大家的意见.我的 ...
- 同一世界服务器架构--Erlang游戏服务器
Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中.之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现.底层的框架需要写很多代码实现,这样既浪费时间 ...
随机推荐
- 不吹不擂,315 道 Python 面试题,欢迎挑战!
各位大佬暂时先来315道题尝尝吧,后面有时间再继续补充. 有缘人如果看到这些题,不妨留言一下答案,来证明下你到底有多水,哈哈哈哈哈刀哈哈哈哈哈哈 第一部分 Python基础篇(80题) 1.为什么学习 ...
- Database Identifiers - SID
These options include your global database name and system identifier (SID). The SID is a unique ide ...
- P1536 村村通(洛谷)并查集
隔壁的dgdger带我看了看老师的LCA教程,我因为学习数学太累了(就是懒),去水了一下,感觉很简单的样子,于是我也来写(水)个博客吧. 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列 ...
- 服务注册与发现【Eureka】- Eureka简介
什么是服务治理 SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来 实现服务治理. 在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所 ...
- nc - 网络工具箱中的「瑞士军刀」
nc 是 Linux下强大的网络命令行工具,主要用于 TCP.UDP.UNIX域套接字 相关的操作 它被设计成可以由其他程序灵活驱动可靠的后台工具,拥有 "瑞士军刀" 的美称,每个 ...
- 干货分享:Python Web 部署方式大全
不要让服务器裸奔 学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服 ...
- 使用themeleaf,在JavaScript中使用for循环报错.....
在for循环前加上/* <![CDATA[ */,在for循环后加/* ]]> */,这样就能正常解析了:如下 /* <![CDATA[ */ for (var i = 0; i & ...
- for循环实现Fibonacci数列
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格 ...
- MapReduce之WritableComparable排序
@ 目录 排序概述 获取Mapper输出的key的比较器(源码) 案例实操(区内排序) 自定义排序器,使用降序 排序概述 排序是MapReduce框架中最重要的操作之一. Map Task和Reduc ...
- CSV文件指定页脚
https://www.cnblogs.com/zhangxinqi/p/9231801.html 2020-06-15