游戏服务器学习笔记 3———— firefly 的代码结构,逻辑
注:以下所有代码都是拿暗黑来举例,由于本人能力有限很多地方还没有看透彻,所以建议大家只是参考。有不对的地方非常欢迎指正。
一、结构
系统启动命令是,python statmaster.py,启动以后可以通过ps看到系统启动了以下几个进程:
1、master:管理模块,通过subprocess.Popen()来启动其它模块,该模块启动一个webserver,简单的通过监听本机9998端口,用get方法来获取用户管理命令,目前默认的是2条命令,stop和reload,负责其它模块的stop,reload功能。
只要在本机浏览器输入:http://localhost:9998/stop 或者http://localhost:9998/reload即可。
2、dbfront:数据库前端模块,负责管理DB和Memcache。比如load用户信息到memcache中,定期(系统写死了1800秒)刷新并同步memcache.
3、gate:这个其实是真正的center,其它模块(除了dbfront)都会和这个模块挂接(通过twisted.pb 后面会抽空详细说明)。
4、net:网络模块,负责监听客户端tcp/ip连接,转发相应的命令数据包给gate。
5、game1:暗黑世界的游戏模块,这个模块里面会处理几乎所有的游戏逻辑,存储所有的游戏数据:比如角色升级的经验等级,各种npc信息,各种掉落信息,各种战斗阵型。这些数据在系统启动前都是保存在mysql里面,game1模块负责load到自己的内存里面(注意,不是memcache里面,而是直接内存)
6、admin:系统管理员模块,其实这个模块对于游戏本身来说,可有可无,主要作用就是导出游戏统计数据,比如在线人数,每天充值数量等等。。。。无非就是简单的load数据库内容在简单做些计算而已,我们不做重点。
二、逻辑
系统启动的过程是:(只看firefly,不管memcache,mysql等)
$ python startmaster.py
startmaster.py 这个python脚本会实例化class master;
按照顺序启动
一个pb.root
一个webserver
然后是subprocess.Popen(cmd) 来启动其它子模块。
cmd命令打印出来为:
python appmain.py dbfront config.json
python appmain.py gate config.json
python appmain.py net config.json
python appmain.py game1 config.json
python appmain.py admin config.json
全部启动起来以后,逻辑关系如下:
master虽然通过红线连接每个模块,但是实际上的工作只是启动和管理,并没有很大的数据交互。
Admin模块虽然挂在这里,但是其基本上只负责统计和“管理员”功能。
大的数据交流,网络服务,游戏逻辑等工作只发生在gate,net,game1 这几个节点。并且根据游戏内容不一样,完全可以进行扩展。(由于俺没有研究过,先不在这里讨论)。
OK,架构简介到这里,后面我们每个模块分开详细介绍。
游戏服务器学习笔记 3———— firefly 的代码结构,逻辑的更多相关文章
- 游戏服务器学习笔记 5———— twisted Perspective Broker 透明代理
实际上这章压根不需要我来说,twisted官网的Doc里面有专门介绍的章节.写的非常详细. http://twistedmatrix.com/documents/current/core/howto/ ...
- 游戏服务器学习笔记 4———— master 模块介绍
(模块的介绍方法都是先说大体功能,在捡一些细节详细讨论.) master 类很简单,就3个函数,一个init,设置配置信息,并调用masterapp,然后还有一个循环启动子进程的start函数. 这里 ...
- DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- 【Visual C++】游戏编程学习笔记之四:透明动画实现
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44224963 作者:ZeeCod ...
- 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
- 【Visual C++】游戏编程学习笔记之七:键盘输入消息
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
- 【Visual C++】游戏编程学习笔记之六:多背景循环动画
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44264153 作者:ZeeCod ...
- DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- C++游戏服务器编程笔记 IP详解
C++游戏服务器编程笔记 IP详解 IP详解 INTERNET的历史 上世纪60年底起源于美国 1992年,Internet上的主机超过了100万台 现在已经是现代文明人的必需品 TCP/IP的 ...
随机推荐
- e864. 取的显示器大小尺寸
See also e670 缓冲图像转换为图像. try { Robot robot = new Robot(); // Capture a particular area on the screen ...
- Visual Studio Code自动识别编码
将设置中的"files.autoGuessEncoding"项的值改为true即可. 详情请转知乎:https://www.zhihu.com/question/34415763
- android http json请求3种不同写法
第一种: public static String invoke() { String result = null; try { final Str ...
- ggplot2 提取stat计算出来的数据
使用ggplot2 绘图时,我们只需要提供原始数据就可以了,ggplot2 内置了许多的计算函数,来帮助我们计算对应的数值. 最典型的的,当使用geom_boxplot 绘制箱线图时,我们只提供原始数 ...
- js 形如 "1,2,3"的操作
查找指定元素在数组中的index. var arr=[1,2,3]; $.inArray(2, arr);//返回1 arr.splice($.inArray(2, arr),1); //从数组中删除 ...
- C# 一个多层循环中,break一次能跳出几个循环?
public class BreakTest { public static void main(String[] args) { ; x<; x++) { ; y<; y++) { ; ...
- 一篇关于apache commons类库的详解[转]
1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta C ...
- windows下更改鼠标滚轮方向
本来鼠标滚轮的方向无所谓“正确”与否(win下和mac下方向相反),只要习惯即可.但从win下切换到mac后,本来是想把鼠标方向调成跟win下一致,结果这么一反转,连多指手势的“左右”都反了,苹果,算 ...
- 【machine translate】deep learning seq2seq
https://www.tensorflow.org/tutorials/seq2seq https://medium.com/@devnag/seq2seq-the-clown-car-of-dee ...
- VMware Workstation “The Msi Failed”解决方法
今天准备装虚拟机时,遇到一个问题一直没办法解决.折腾了一下午,总算解决了.在这里记录以下,以便大家遇到相同的问题时,能尽快解决. 由于以前安装过WMware Workstation,然后又卸载了.今天 ...