gfirefly 跨机器部署 物理机
转自 http://www.9miao.com/thread-59684-1-1.html
gfirefly是分布式的, 如何体现分布式? 简单来讲, 当用户数量大到一定级别的时候, 一台服务器可能承受不住, 那么这个时候就需要多台服务器联合作业。
下面简单说说如何联合作业
先简单说下流程
1.多模式启动的时候
a.master节点启动 作为主服务器
b.net gate game1到gameN等子节点全部连接master
c.当master发现gate连接上来的时候, 由master通知net game1到gameN去连接gate.
所以会发现master作为总服务器持有gate和net等节点的ip port信息。代码详见:gtwisted/protocols/class ServerFactory下面的__call__函数.
这个时候master就可以顺理成章的通知net等子节点去连接gate主节点了, 因为master知道gate的ip和port.
我启动两台gfirefly的服务器作为测试[PNG_1]:
<ignore_js_op>
上面的一台为multil模式 即所有节点都启动
下面想要达到的效果是启动另一台服务器的一个单节点去连接上面的那台服务器。
先看配置:"master":{"roothost":"localhost","rootport":9999,"webport":9998}, 这个roothost配置的ip要跟上面的服务器的ip一样,加入上面的是a.b.c.d的话, 这台不能用localhost要用a.b.c.d 端口当然也要保持一致
再配置子节点, 我期待从现在的这台服务器上启动一个叫做scene_1000的场景服务器进程连接到上面的那台服务器, 配置为
"scene_10000":{"name":"scene_10000","log":"app/log/scene_10000.log","app":"app.startgame","mem":"True","db":"True","remoteport":[{"rootport":10000,"rootname":"gate"}]},
当然这是在"servers"下的配置。
再看如何启动连接上面的服务器, 这个时候要采用单点模式启动[PNG_2]:
启动命令单点模式:python startmaster.py single scene_10000
<ignore_js_op>
看见单节点启动成功
再看看这个节点时候成功连接到上面的那台服务器[PNG_3]:
<ignore_js_op><ignore_js_op>
可以看到另外一台服务器成功接收到scene_1000的注册