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

本文介绍gFirefly服务启动流程,包括加载配置文件、初始化全局对象、启动日志系统及监听端口等步骤,并通过Python脚本实现单或多服务器模式下的启动。

起動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,sys
from gtwisted.core import reactor
from gfirefly.utils import  services
from gfirefly.distributed.root import PBRoot,BilateralFactory
from gfirefly.server.globalobject import GlobalObject
from gtwisted.utils import log
from gfirefly.server.logobj import loogoo
from flask import Flask

reactor = reactor

MULTI_SERVER_MODE = 1
SINGLE_SERVER_MODE = 2
MASTER_SERVER_MODE = 3



class 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值