这里以disp_serv为例来说明新建一个进程所需的代码结构和相关配置
通信配置
首先我们需要将新的进程加入proc_bridge的通信链路中.
- 打开sgame/proc_bridge/sgame/bridge.cfg,新加一组disp_serv进程
我们为disp_serv组的两个进程分别分配了proc_id:40001和40002,并让其委托进程分别监听于11000,11001端口
[PROC] conn_serv-1 = 10001:127.0.0.1:10060 logic_serv-1 = 20001:127.0.0.1:10083 db_logic_serv-1 = 30001:127.0.0.1:10070 conn_serv-2 = 10002:127.0.0.1:10061 logic_serv-2 = 20002:127.0.0.1:10084 db_logic_serv-2 = 30002:127.0.0.1:10071 disp_serv-1 = 40001:127.0.0.1:11000:60 disp_serv-2 = 40002:127.0.0.1:11001:60 [/PROC]
- 配置disp_serv的通信信道.我们对disp_serv的功能定位为互通不同的逻辑组,所以每个disp_serv需要与每个logic_serv互通,我们来看配置关系
#CHANNEL #用于配制每个进程的发射通道。如果A需要与B互相通信,则A需要配置对B的发送通道;同时B配置对A的发送通道 #格式: proc_name:target_proc_name1,target_proc_name2,... ####通配符处理:在进程名合乎规范 # proc_name='prefix+数字' 时,支持简单的通配处理: # prefix[A]:prefixA # prefix[A-B]:prefixA 直到 prefixB (注意A<=B) # prefix[A;B]:prefixA 和 prefixB # prefix[A-B;C]:prefixA 直到 prefixB 和 prefixC [CHANNEL] conn_serv-1:logic_serv-1 logic_serv-1:conn_serv-1,db_logic_serv-1,disp_serv-1,disp_serv-2 db_logic_serv-1:logic_serv-1 conn_serv-2:logic_serv-2 logic_serv-2:conn_serv-2,db_logic_serv-2,disp_serv-1,disp_serv-2 db_logic_serv-2:logic_serv-2 disp_serv-1:logic_serv-1,logic_serv-2 disp_serv-2:logic_serv-1,logic_serv-2 [/CHANNEL]
我们在logic_serv后新增了一组对disp_serv的发送通道;为每个disp_serv增加了对每个logic_serv的发送通道
动态添加
- 如果我们之前成功部署过proc_bridge,那么在sgame/proc_bridge/sgame/目录下会有bride_build.py工具
python bridge_build.py -h usage:./bridge_build.py <OPTION> or python ./bridge_build.py <OPTION> OPTION: -h: show help -a: deploy and build all proc bridges -A <proc_name>: deploy and build a bridge of <proc_name> -c: create all proc-bridge cfg files -C <proc_name>: create proc-bridge cfg file of <proc_name> -I: print cfg parsing info -p: push all proc-bridge cfg file -P <proc_name>: push proc-bridge cfg file of <proc_name> -r: reload cfg file by all proc-bridge -R <proc_name>: reload cfg file by proc-bridge of <proc_name> -s: shut down all proc bridges -S <proc_name>:shut down proc-bridge of <proc_name>
具体的用法可以参考 https://github.com/nmsoccer/proc_bridge/wiki/construct-tool
- 我们使用manager工具查看当前的链路状况:进入sgame/proc_bridge/sgame/目录
./manager -i 1 -N sgame 输入命令STAT * STAT * ========================== 【STAT *】 ========================== ----------[1]---------- <PROC> logic_serv-2:20002 <ADDR> 127.0.0.1:10084 <MY-CONNECT> connected <CONNECT> *connect all:2020-08-11 20:08:42 ----------[2]---------- <PROC> conn_serv-2:10002 <ADDR> 127.0.0.1:10061 <MY-CONNECT> connected <CONNECT> *connect all:2020-08-11 20:08:44 ... ----------[6]---------- <PROC> logic_serv-1:20001 <ADDR> 127.0.0.1:10083 <MY-CONNECT> connected <CONNECT> *connect all:2020-08-11 20:08:45
已有6个进程,是两组逻辑组的六个进程
- 我们使用最新的bridge.cfg 执行python ./bridge_build.py -c 为所有的通信节点重新生成配置
python ./bridge_build.py -c ---------[Parse Config file]------------ ---------[Create Cfg]------------ create_cfg success! [nmsoccer@VM_0_10_centos sgame]$ tree cfg/ cfg/ |-- __carrier_manager__-0 | `-- carrier.cfg |-- conn_serv-1 | `-- carrier.cfg |-- conn_serv-2 | `-- carrier.cfg |-- db_logic_serv-1 | `-- carrier.cfg |-- db_logic_serv-2 | `-- carrier.cfg |-- db_serv-1 | `-- carrier.cfg |-- disp_serv-1 | `-- carrier.cfg |-- disp_serv-2 | `-- carrier.cfg |-- logic_serv-1 | `-- carrier.cfg `-- logic_serv-2 `-- carrier.cfg
可以看出disp_serv的配置已经生成OK鸟
- 先主动部署并拉起新的disp_serv节点
python ./bridge_build.py -A disp_serv-1 ---------[Build Bridge <disp_serv-1>]------------ <<proc_name: disp_serv-1>> ./deploy_proc.sh disp_serv-1 40001 127.0.0.1 11000 nmsoccer /home/nmsoccer/proc_bridge/sgame 0 60 50 sgame try to deploy disp_serv-1 to nmsoccer@127.0.0.1[11000]:/home/nmsoccer/proc_bridge/sgame copy carrier.40001.tar.gz and carrier.40001.md5 to /home/nmsoccer/proc_bridge/sgame/disp_serv-1 success! unzip carrier.40001.tar.gz success~ try to delete shm... try to create shm... try to start carrier... name_space:sgame deploy finish python ./bridge_build.py -A disp_serv-2 ...
- 为全部节点推送配置:
python ./bridge_build.py -p
- 全部节点重新加载配置:
python ./bridge_build.py -r
- 我们使用manager工具查看当前的链路状况,重点观察logic_serv与disp_serv的连接情况:
./manager -i 1 -N sgame ----------[1]---------- <PROC> disp_serv-2:40002 <ADDR> 127.0.0.1:11001 <MY-CONNECT> connected <RUN> *reload config file:2020-08-11 20:22:51 result:success *ERROR:upper process may not run:2020-08-11 20:24:57 <CONNECT> *connect all:2020-08-11 20:24:56 ----------[2]---------- <PROC> disp_serv-1:40001 <ADDR> 127.0.0.1:11000 <MY-CONNECT> connected <RUN> *reload config file:2020-08-11 20:22:51 result:success *ERROR:upper process may not run:2020-08-11 20:24:58 <CONNECT> *connect all:2020-08-11 20:24:56 ----------[3]---------- <PROC> logic_serv-2:20002 <ADDR> 127.0.0.1:10084 <MY-CONNECT> connected <RUN> *reload config file:2020-08-11 20:22:51 result:success <CONNECT> *connect all:2020-08-11 20:24:57 ----------[8]---------- <PROC> logic_serv-1:20001 <ADDR> 127.0.0.1:10083 <MY-CONNECT> connected <RUN> *started:2020-07-07 14:35:17 *reload config file:2020-08-11 20:22:50 result:success <CONNECT> *connect all:2020-08-11 20:24:58 可以随机看一组ROUTE,我们执行命令ROUTE logic_serv-1 disp_serv-2 【ROUTE logic_serv-1 disp_serv-2】 ========================== opted opting max_size min_size ave_size dropped latest_drop reseted latest_reset delay buff buffing max-buffed ----------------------------------------------------- >>disp_serv-2 0 0 0 0 0 0 - 0 - 0 204842 0 0 <<disp_serv-2 0 0 0 0 0 0 -
可以看出logic_serv与disp_serv均已互连,动态更新完毕