gFirefly 學習筆記 (一) - 了解 startmaster.py

来源:互联网 发布:知聊下载 编辑:程序博客网 时间:2024/06/05 19:45

起動gFirefly 流程

加載gfirefly, master.py

  1. 執行 startmaster.py -> 執行master.py
  2. 由config.json 讀取數服務器結構
  3. 加載了gfirefly, gtwisted, flask
  4. 起動master server
  5. GlobalObject() 中加入 json_config, root (PBroot), webroot (flask)
  6. 起動日志系統
  7. 監聽各動返回數據的端口 (webport, rootport)
  8. 使用cmd 起動 node 服務器
  9. 執行appmain.py (查看下一篇文章︰)

cmd 的內容如下︰

python appmain.py chatserver config.json

master.py 內容查看

#coding:utf8'''Created on 2013-8-2@author: lan (www.9miao.com)'''import subprocess,json,sysfrom gtwisted.core import reactorfrom gfirefly.utils import  servicesfrom gfirefly.distributed.root import PBRoot,BilateralFactoryfrom gfirefly.server.globalobject import GlobalObjectfrom gtwisted.utils import logfrom gfirefly.server.logobj import loogoofrom flask import Flaskreactor = reactorMULTI_SERVER_MODE = 1SINGLE_SERVER_MODE = 2MASTER_SERVER_MODE = 3class Master:    """    """    def __init__(self):        """        """        self.configpath = None        self.mainpath = None        self.root = None        self.webroot = None    def config(self,configpath,mainpath):        """        """        self.configpath = configpath        self.mainpath = mainpath    def masterapp(self):        """        """        config = json.load(open(self.configpath,'r'))        GlobalObject().json_config = config        mastercnf = config.get('master')        rootport = mastercnf.get('rootport')        webport = mastercnf.get('webport')        masterlog = mastercnf.get('log')        self.root = PBRoot()        rootservice = services.Service("rootservice")        self.root.addServiceChannel(rootservice)        self.webroot = Flask("master")        GlobalObject().root = self.root        GlobalObject().webroot = self.webroot        # 日志系統        if masterlog:            log.addObserver(loogoo(masterlog))#日志处理        log.startLogging(sys.stdout)        import webapp        import rootapp        # 生成接收各服務器消息專用socket        reactor.listenWSGI(webport, self.webroot)        reactor.listenTCP(rootport, BilateralFactory(self.root))    def start(self):        '''        '''        sys_args = sys.argv        if len(sys_args)>2 and sys_args[1] == "single":            server_name = sys_args[2]            if server_name == "master":                mode = MASTER_SERVER_MODE            else:                mode = SINGLE_SERVER_MODE        else:            mode = MULTI_SERVER_MODE            server_name = ""        if mode == MULTI_SERVER_MODE:            self.masterapp()            config = json.load(open(self.configpath,'r'))            sersconf = config.get('servers')            for sername in sersconf.keys():                cmds = 'python %s %s %s'%(self.mainpath,sername,self.configpath)                subprocess.Popen(cmds,shell=True)            reactor.run()        elif mode == SINGLE_SERVER_MODE:            config = json.load(open(self.configpath,'r'))            sername = server_name            cmds = 'python %s %s %s'%(self.mainpath,sername,self.configpath)            subprocess.Popen(cmds,shell=True)        else:            self.masterapp()            reactor.run()
0 0
原创粉丝点击