分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)
在开发一款游戏项目时,在立项时我们往往会考虑或者纠结很多,比如:
1,对于开发来说:服务端和客户端应该选择什么语言?用什么协议通信才更效率?协议后期如何维护?Socket是用长连接还是短连接?TCP还是UDP?客户端资源、配置表、代码如何进行热更新?等等。
2,对于策划来说:配置表使用什么比较方便?使用excel?又或者自行开发工具进行导出配置供程序使用?
3,对于运维来说:服务端如何高度自动化将人力成本节省到最小?如何自动维护?自动合服?能不能做到维护完全不需要人工参与?在几十台?几百台服务器的前提下如何对服务器进行批量更新?能不能定时操作?服务器的日志查看麻烦吗?能不能通过后台工具直接查看?如果线上服务器代码出现问题,有没有手段可以直接hotpatch?
4,对于运营来说:服务端活动能不能直接在后台工具里配?后台能不能查看一系列的精分数据?能不能直接查看服务器相关数据?能不能发邮件,发公告?对玩家封号禁言等等。
所以我今天开源的框架就是为了解决上面的所有问题,为了大家在开发一个项目时能够少走弯路,将精力全部放在开发游戏业务上面,而不用在上面这些事情耗费太多精力,提升项目的开发效率。
源代码SVN地址: svn://47.107.60.212:18081
QQ交流群:162424313
这是我本人通过多年的工作经验积累下来的一个框架,目前只在一个线上项目运行过,可能会存在一些隐藏的bug,所以还希望大家多多包涵,有什么问题可以及时进群与我沟通,或者在下面留言。
由于没有太多时间写文档,我在下面对框架做一个简单的介绍,写的比较粗旷,有更多的疑问欢迎进群讨论。
框架涉及的语言以及依赖
服务端
1,C++11 核心的底层
2,Python 3.6 跟C++高度集成,大部分的一些框架逻辑在Python层完成
客户端(Unity)
1,C# 网络通信及协议使用的C#(C#的协议不支持热更新)
2,Lua(XLua) 协议部分除了支持C#之外也支持lua,使用的是腾讯开源项目XLua(XLua协议和代码支持热更新)
引用的开源项目
1,boost_1_65_1 C++库所依赖
2,poco-1.7.9-all C++库所依赖
3,openssl-1.0.2o SSL加密通信时所依赖
2,mongo-cxx-driver-r3.2.0 mongodb C++版接口
3,mongo-c-driver-1.9.5 mongodb C版接口
Windows下编译需要使用VS2015 Update2
下面是精简版的架构图
上图中除了管理服务器外所有服务器都支持水平扩展。
框架所包含的角色:
1,网关服务器(GateServer) 实现了一个类似Redis服务器中的订阅与发布功能,所有其他服务器都会与之连接
2,守护进程(Daemon) 每一个物理机器上面都会部署一个守护进程,然后由这个守护进程来管理所有其他业务逻辑的生命周期。
举个例子,比如说现在在腾讯云买了100台物理服务器,你只需要做的就是在每一台服务器上面部署一个守护进程,然后把每个守护进程的端口和IP都记录下来,全部都录入到后台工具里面,
从此以后你比如要在这100台物理服务器中运行更多的业务逻辑服务器时(跑一个进程就是一个区,一般好一点的机器一台可以跑10个以上的进程),比如我一台跑10个区,100台就是1000个区,这1000个区的维护全部可以通过后台管理工具进行批量化操作。
3,管理服务器(AdminServer) 一个集群里面唯一的单点服务器,负责接受后台工具的指令 以及相关运营 运维功能全部在这里。该服务器实际上不会接受用户的连接,只会接受内部管理工具的连接,所以实际上是没有任何压力的。
4,后台管理工具(AdminTools) 所有服务器启停的控制,定时任务下发,服务器的代码版本更新,维护,定时维护,合服,渠道管理,平台管理,服务器的日志查看,精分数据曲线图表,发送全服邮件或者公告,活动的配置。等等
5,配置文件编辑工具 一个单独的配置文件生成和导出工具,用于接收策划配置的Excel配置表,然后转换成内部格式 导出相关的C++、Python、C#、Lua版本的数据结构,和二进制的配置文件数据。
6,协议生成工具 用于将协议的源文件导出成程序可识别的数据结构支持C++、Python、C#、LuA (类似Protobuf导出pb的功能)。
7,登录服务器(LoginServer)、逻辑服务器(LogicServer)、战斗服务器(FightServer)、聊天服务器(ChatServer) 所有的业务服务器由Daemon守护进程控制启停,以及所有的维护更新合服等等全部由Daemon自动操作完成,它们的部署不需要人工手动参与。
所有服务器之间,服务器和客户端之间,全部采用Tcp长连接,自定义协议,协议用Python描述
关于更多的协议编写规范请看 这里
Windows上的编译:
1,安装Python3.7.0 64位版本
2,使用pip 安装PyQt5、rsa、psutil、requests、pymongo
3,从SVN将代码下载代码(地址在上面)
4,修改 trunk\3rdParty\FastNet\Builds\Proj.Win64\FastNet.props 中的 <PythonRootDir>C:/Python/Python37/</PythonRootDir> 将其中的C:/Python/Python37/换成你自己的安装路径
然后就可以通过VS2015打开Solution.sln进行编译了。注意VS2015 需要安装 Update2.
未完待续。。。
分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)的更多相关文章
- 《Python》网络编程之客户端/服务端框架、套接字(socket)初使用
一.软件开发的机构 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:QQ.微信.网盘等这一类是属于需要安装的桌面应用 第二种是web类:比如百度.知乎.博客园等使用浏览器访问 ...
- 分享一个使用 vue.js 开发的网站
点我 惠淘党 照着文档和google开发,只花了一个多星期.依赖包如下 { "name": "vue-htd", "version": &q ...
- 分享一个基于Abp Vnext开发的API网关项目
这个项目起源于去年公司相要尝试用微服务构建项目,在网关的技术选型中,我们原本确认了ApiSix 网关,如果需要写网关插件需要基于Lua脚本去写,我和另外一个同事当时基于这个写了一个简单的插件,但是开发 ...
- 【转帖】分享一个迅为4412开发板OTG烧录批处理文件
平台:iTOP-4412开发板 Bat 功能: 1.可以分条的执行烧录,不需要每次烧录都去复制命令 2.可以批量烧录 开发板系统烧录批处理文件,请将此文件放置在fastboot程序同目录下,下载地址: ...
- XGoServer 一个基础性、模块完整且安全可靠的服务端框架
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- python 开发之路 - 入门
一. python 介绍 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言.1991年 发布Python ...
- Python开发 第01课 Python 简介
一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
- Python开发简介
年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 . 最新的TIOBE排行榜,Python已经占据世界第四名的位置, Python崇尚优美 ...
- python开发第一篇:初识python
一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
随机推荐
- java并发编程(一)
java并发编程(一) 线程基础 在Java代码中,单独创建线程,都需要使用类java.lang.Thread,通常可以通过集成并扩展Thread的run()方法,也可以来创建一个Thread,将一个 ...
- .netcore--Controller后台实现企业微信发送消息
一.获得企业微信管理端权限,登录企业企业微信管理端界面,并创建应用,如下图中的[网站消息推送] 二.参见企业微信API文献,根据corpid=ID&corpsecret=SECRET(其中企业 ...
- Kera高层API
目录 Keras != tf.keras Outline1 Metrics Step1.Build a meter Step2.Update data Step3.Get Average data C ...
- bzoj2502清理雪道
传送门 好题啊,由于每个点既可以进,也可以出,就可以新建一个源点和汇点,对于每个点都连边,然后就是最小流板子了. 代码: #include<cstdio> #include<iost ...
- eclipse中,添加JavaSE帮助文档和源码
- python之yagmail发送邮件
yagmail发送邮件 import yagmail yag = yagmail.SMTP(user="xxxxxxxxxx@163.com",password="xxx ...
- 洛谷2758(字符串dp)
题目传送 记得这是我初学dp时的一道题 虽说就像LCS一样搞一搞即可 但我还是写挂了qwq #include <cstdio> #include <cstring> #incl ...
- c#学习系列之字段(静态,常量,只读)
C#静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量.static变量在对象被实例化时创建,通过对象进行访问一个类的所 ...
- 关于Chrome和Opera中draw Image()方法无法在canvas画布中绘制图片的问题
var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); var img=d ...
- 118 Pascal's Triangle 帕斯卡三角形 杨辉三角形
给定 numRows, 生成帕斯卡三角形的前 numRows 行.例如, 给定 numRows = 5,返回[ [1], [1,1], [1,2,1], [1,3,3,1], [1 ...