From e543e302ef0f5ec52290cdd5c676e6b7c5e068b1 Mon Sep 17 00:00:00 2001 From: duanhf2012 Date: Tue, 21 Apr 2020 17:23:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cluster/cluster.go | 3 +- cluster/parsecfg.go | 51 ++++++++++-- example/GateService/GateService.go | 2 +- example/config/cluster/subnet/service.json | 92 ++++++++++++++++------ node/node.go | 2 +- 5 files changed, 113 insertions(+), 37 deletions(-) diff --git a/cluster/cluster.go b/cluster/cluster.go index 84b30eb..04b5108 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -41,7 +41,8 @@ type Cluster struct { localNodeMapService map[string]interface{} //本Node支持的服务 localNodeInfo NodeInfo - localNodeServiceCfg map[string]interface{} //map[servicename]数据 + localServiceCfg map[string]interface{} //map[servicename]数据 + localNodeServiceCfg map[int]map[string]interface{} //map[nodeid]map[servicename]数据 mapRpc map[int] NodeRpcInfo//nodeid diff --git a/cluster/parsecfg.go b/cluster/parsecfg.go index 856dff2..42ee37e 100644 --- a/cluster/parsecfg.go +++ b/cluster/parsecfg.go @@ -3,6 +3,7 @@ package cluster import ( "encoding/json" "fmt" + "github.com/duanhf2012/origin/log" "io/ioutil" "strings" ) @@ -22,20 +23,39 @@ func (slf *Cluster) ReadClusterConfig(filepath string) (*SubNet,error) { } -func (slf *Cluster) ReadServiceConfig(filepath string) (map[string]interface{},error) { +func (slf *Cluster) ReadServiceConfig(filepath string) (map[string]interface{},map[int]map[string]interface{},error) { + c := map[string]interface{}{} d, err := ioutil.ReadFile(filepath) if err != nil { - return nil, err + return nil,nil, err } err = json.Unmarshal(d, &c) if err != nil { - return nil, err + return nil,nil, err } - return c,nil + serviceConfig := map[string]interface{}{} + serviceCfg,ok := c["Service"] + if ok == true { + serviceConfig = serviceCfg.(map[string]interface{}) + } + mapNodeService := map[int]map[string]interface{}{} + nodeServiceCfg,ok := c["NodeService"] + if ok == true { + nodeServiceList := nodeServiceCfg.([]interface{}) + for _,v := range nodeServiceList{ + serviceCfg :=v.(map[string]interface{}) + nodeid,ok := serviceCfg["NodeId"] + if ok == false { + log.Fatal("nodeservice list not find nodeid field: %+v",nodeServiceList) + } + mapNodeService[int(nodeid.(float64))] = serviceCfg + } + } + return serviceConfig,mapNodeService,nil } func (slf *Cluster) ReadAllSubNetConfig() error { @@ -71,10 +91,11 @@ func (slf *Cluster) ReadLocalSubNetServiceConfig(subnet string) error { for _,f := range fileInfoList{ if f.IsDir() == true && f.Name()==subnet{ //同一子网 filePath := strings.TrimRight(strings.TrimRight(clusterCfgPath,"/"),"\\")+"/"+f.Name()+"/"+"service.json" - localNodeServiceCfg,err:=slf.ReadServiceConfig(filePath) + localServiceCfg,localNodeServiceCfg,err:=slf.ReadServiceConfig(filePath) if err != nil { return fmt.Errorf("Read file %s is fail :%+v",filePath,err) } + slf.localServiceCfg = localServiceCfg slf.localNodeServiceCfg =localNodeServiceCfg } } @@ -186,11 +207,25 @@ func (slf *Cluster) GetNodeIdByService(servicename string) []int{ return nodelist } -func (slf *Cluster) GetServiceCfg(servicename string) interface{}{ - v,ok := slf.localNodeServiceCfg[servicename] - if ok == false{ +func (slf *Cluster) getServiceCfg(servicename string) interface{}{ + v,ok := slf.localServiceCfg[servicename] + if ok == false { return nil } return v } + +func (slf *Cluster) GetServiceCfg(nodeid int,servicename string) interface{}{ + nodeService,ok := slf.localNodeServiceCfg[nodeid] + if ok == false { + return slf.getServiceCfg(servicename) + } + + v,ok := nodeService[servicename] + if ok == false{ + return slf.getServiceCfg(servicename) + } + + return v +} diff --git a/example/GateService/GateService.go b/example/GateService/GateService.go index 61a7716..38ef8a9 100644 --- a/example/GateService/GateService.go +++ b/example/GateService/GateService.go @@ -30,7 +30,7 @@ func (slf *GateService) OnInit() error{ slf.processor2 = &processor.PBProcessor{} slf.processor2.RegisterDisConnected(slf.OnWSDisconnected) slf.processor2.RegisterConnected(slf.OnWSConnected) - + wsService.SetProcessor(slf.processor2,slf.GetEventHandler()) diff --git a/example/config/cluster/subnet/service.json b/example/config/cluster/subnet/service.json index cee8ab3..6596abb 100644 --- a/example/config/cluster/subnet/service.json +++ b/example/config/cluster/subnet/service.json @@ -1,29 +1,69 @@ { - "HttpService":{ - "ListenAddr":"0.0.0.0:9402", - "ReadTimeout":10000, - "WriteTimeout":10000, - "ProcessTimeout":10000, - "CAFile":[ - { - "Certfile":"", - "Keyfile":"" - } - ] - + "Service":{ + "HttpService":{ + "ListenAddr":"0.0.0.0:9402", + "ReadTimeout":10000, + "WriteTimeout":10000, + "ProcessTimeout":10000, + "CAFile":[ + { + "Certfile":"", + "Keyfile":"" + } + ] + + }, + "TcpService":{ + "ListenAddr":"0.0.0.0:9030", + "MaxConnNum":3000, + "PendingWriteNum":10000, + "LittleEndian":false, + "MinMsgLen":4, + "MaxMsgLen":65535 + }, + "WSService":{ + "ListenAddr":"0.0.0.0:9031", + "MaxConnNum":3000, + "PendingWriteNum":10000, + "MaxMsgLen":65535 + } }, - "TcpService":{ - "ListenAddr":"0.0.0.0:9030", - "MaxConnNum":3000, - "PendingWriteNum":10000, - "LittleEndian":false, - "MinMsgLen":4, - "MaxMsgLen":65535 - }, - "WSService":{ - "ListenAddr":"0.0.0.0:9031", - "MaxConnNum":3000, - "PendingWriteNum":10000, - "MaxMsgLen":65535 - } + "NodeService":[ + { + "NodeId":1, + "TcpService":{ + "ListenAddr":"0.0.0.0:9830", + "MaxConnNum":3000, + "PendingWriteNum":10000, + "LittleEndian":false, + "MinMsgLen":4, + "MaxMsgLen":65535 + }, + "WSService":{ + "ListenAddr":"0.0.0.0:9031", + "MaxConnNum":3000, + "PendingWriteNum":10000, + "MaxMsgLen":65535 + } + }, + + { + "NodeId":2, + "TcpService":{ + "ListenAddr":"0.0.0.0:9030", + "MaxConnNum":3000, + "PendingWriteNum":10000, + "LittleEndian":false, + "MinMsgLen":4, + "MaxMsgLen":65535 + }, + "WSService":{ + "ListenAddr":"0.0.0.0:9031", + "MaxConnNum":3000, + "PendingWriteNum":10000, + "MaxMsgLen":65535 + } + } + ] + } \ No newline at end of file diff --git a/node/node.go b/node/node.go index 2256298..f6d653b 100644 --- a/node/node.go +++ b/node/node.go @@ -85,7 +85,7 @@ func initNode(id int){ //4.init service for _,s := range preSetupService { - pServiceCfg := cluster.GetCluster().GetServiceCfg(s.GetName()) + pServiceCfg := cluster.GetCluster().GetServiceCfg(nodeId,s.GetName()) s.Init(s,cluster.GetRpcClient,cluster.GetRpcServer,pServiceCfg) } }