总体架构及demo讲解

gfirefly是开源的分布式游戏服务器端框架,是firefly的gevent版本,想了解更多关于firefly可参考,这是firefly的官网。不过我关注的是gfirefly,主要有两个原因。

1.gfirefly性能更好(官方说法)

2.我对twisted不是很熟,但对gevent比较熟悉,想阅读源码可能gfirefly更合适。

不得不说9秒很有才,由于firefly底层使用了twisted,所以他们开发了一个简易版本的gtwisted,封装了twisted中的Protocol,Factory,Transport等概念,所以导致gfirefly代码和firefly保持惊人的一致。

建议大家可以先看看9秒的wiki文档,下载地址

完整的gfirefly包含以下几个组件:

下面将介绍上图的节点:

1. master管理节点 这是用来管理所有节点的节点,如可通过http来关闭所有节点(可回调节点注册的关闭方法),其实master节点也可以理解为是分布式root节点,其它节点都是remote节点

2.net前端节点 net节点是client端连接节点,负责数据包的结束,解包,封包,发送。net节点也是gate节点的分布式节点,由于游戏中流量较大,所以一般net节点只负责解包,封包,然后将解包后的数据转发给gate分布式根节点,处理完毕后再有net节点将处理结果发给client

3.gate分布式根节点 net节点将解包的数据发给gate节点后,gate节点可以自己处理数据返回结果,也可以调用remote子节点处理数据。

4.remote子节点 一般remote子节点都是真正干活的节点

5.dbfront节点 这个节点一般是负责管理memcache和数据库交互的节点

通过以上分析,我们可以很清晰的看出gfirefly的确是分布式的游戏服务器框架。

我们看看gfirefly源码的总体结构:

dbentrust/ 主要实现memcache和数据库之间的映射

distributed/ 实现了分布式的节点和管理,root.py主要是分布式根节点,node节点实现了远程调用对象的

management/ 主要提供了命令行创建项目,类似django的createproject等

master/ master节点相关,web管理接口,以及启动其它节点,通过subprocess模块

netconnect/ net节点的封包解包,以及连接管理

server/ gate等其它节点都是通过server/server.py来实现的

utils/ 一些有用工具,如单例metaclass,贯彻节点提供的服务(servers.py)

gfirefly提供了较为完整的分布式控制,可以通过配置文件开启所需的节点。也许你的项目流量不大,并不需要分布式,或者压根没有数据库,那么只开启net节点就好了。当然net节点一般肯定是需要开启的,下面我们来看看gfirefly的配置文件。

新建简单的一个项目,目录结构如下:

项目可以在我的github上下载:https://github.com/Skycrab/gfirefly/tree/0.16/gfirefly/example/ex_all

因为这个项目涉及到所有的节点,所以我叫ext_all(example_allnode)

配置文件config.json:

{"master":{"rootport":9999,"webport":9998},"servers":{"gate":{"rootport":10000,"name":"gate","app":"app.gateserver"},"dbfront":{"name":"dbfront","db":true,"mem":true,"app":"app.dbfrontserver"},"net":{"netport":1000,"name":"net","remoteport":[{"rootport":10000,"rootname":"gate"}],"app":"app.netserver"},"game1":{"remoteport":[{"rootport":10000,"rootname":"gate"}],"name":"game1","app":"app.game1server"}},"db":{"host":"localhost","user":"root","passwd":"","port":3306,"db":"anheisg","charset":"utf8"},"memcached":{"urls":["127.0.0.1:11211"],"hostname":"anheisg"}}

1.master定义了两个端口,故名思议,webport就是我们可以通过http端口管理节点,如就是关闭服务器和所有节点。我们上面说过其实master也是其它所有节点的根节点,所以rootport就是监听的节点,其它所有节点会在初始化时连接rootport

2.重点在servers,所谓的servers也就是我们要起的节点。

#gate,因为gate也是其它节点(net节点等)的根节点,所以它需要rootport,也就是说gate将会监听10000端口等待子节点的连接。name就是给gate起个名字,关注一下app,app唯一的作用就是gate节点最后会import app.gateserver,其实也就是运行app.gateserver.py,从上面的项目结构我们看到的确有这个文件。在这个文件里,我们会定义gate将如何处理数据,后面会看到。

#net,我们知道net是client端连接的节点,所以netport也就是net监听的端口,client将向netport这个端口发送数据。重点在remoteport,所谓的remoteport其实就是定义它的父节点,父节点可以有多个,所以是数组。我们看到父节点是10000端口,是gate监听的端口,所以说gate是net的父节点。

#game1,,我们看到game1的remoteport中也是有gate节点的,所以gate节点也是game1节点的父节点。因为game1节点并不需要监听其它端口,所以它没有定义自己的rootport。

害怕攀登高峰的人,永远在山下徘徊。

总体架构及demo讲解

相关文章:

  • 【算法】直接插入排序C语言实现
  • 嵌入式 FAAC1.28 在海思HI3518C/HI3518A平台linux中的编译优化
  • Android 动画animation 深入分析
  • 你感兴趣的文章:

    标签云:

    亚洲高清电影在线, 免费高清电影, 八戒影院夜间, 八戒电影最新大片, 出轨在线电影, 午夜电影院, 在线影院a1166, 在线电影院, 在线观看美剧下载, 日本爱情电影, 日韩高清电影在线, 电影天堂网, 直播盒子app, 聚合直播, 高清美剧, 高清美剧在线观看 EhViewer-E站, E站, E站绿色版, qqmulu.com, qq目录网, qq网站目录,