From 7fd97033ec0185a675ec0b336460ce8ab2a32dc8 Mon Sep 17 00:00:00 2001 From: boyce Date: Wed, 5 Feb 2020 17:51:51 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E7=BD=91=E7=BB=9C=E5=BA=93?= =?UTF-8?q?=202.rpc=E5=8D=8F=E8=AE=AE=E5=9C=A8=E5=AE=95=E6=9C=BA=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E5=AF=BC=E8=87=B4=E6=95=B4=E4=B8=AArpc?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- network/tcpsocketclient.go | 7 ++++++- network/tcpsocketserver.go | 7 ++++++- originnode/node.go | 2 +- rpc/server.go | 5 +++-- util/Coroutine.go | 14 ++++++++++++-- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/network/tcpsocketclient.go b/network/tcpsocketclient.go index d946b45..3985755 100644 --- a/network/tcpsocketclient.go +++ b/network/tcpsocketclient.go @@ -8,6 +8,7 @@ import ( type TcpSocketClient struct { conn net.Conn + addr string } func (slf *TcpSocketClient) Connect(addr string) error{ @@ -22,13 +23,17 @@ func (slf *TcpSocketClient) Connect(addr string) error{ return err } slf.conn = conn - + slf.addr = addr // return nil } func (slf *TcpSocketClient) SendMsg(packtype uint16,message proto.Message) error{ + if slf.conn == nil { + return fmt.Errorf("cannt connect %s",slf.addr) + } + var msg MsgBasePack data,err := proto.Marshal(message) if err != nil { diff --git a/network/tcpsocketserver.go b/network/tcpsocketserver.go index d7f707b..67c2ae1 100644 --- a/network/tcpsocketserver.go +++ b/network/tcpsocketserver.go @@ -247,7 +247,12 @@ func (slf *SClient) onsend(){ } pPackData := pack.(*MsgBasePack) - slf.conn.Write(pPackData.Bytes()) + _,e := slf.conn.Write(pPackData.Bytes()) + if e!=nil { + service.GetLogger().Printf(service.LEVER_DEBUG, "clent id %d write error...",slf.id) + return + } + //fmt.Print("xxxxxxxxxxxxxxx:",n,e) } } diff --git a/originnode/node.go b/originnode/node.go index 2bc1a3a..2ac77f9 100644 --- a/originnode/node.go +++ b/originnode/node.go @@ -143,7 +143,7 @@ func NewOriginNode() *COriginNode { //安装系统服务 syslogservice := &sysservice.LogService{} - syslogservice.InitLog("syslog", fmt.Sprintf("syslog_%d", CurrentNodeId), sysmodule.LEVER_INFO) + syslogservice.InitLog("syslog", fmt.Sprintf("syslog_%d", CurrentNodeId), sysmodule.LEVER_DEBUG) service.InstanceServiceMgr().Setup(syslogservice) //初始化集群对象 diff --git a/rpc/server.go b/rpc/server.go index 84599c1..8f9eb4e 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -324,7 +324,7 @@ func (server *Server) register(rcvr interface{}, name string, prefix string, use _, ok := server.mapCallQueue[sname] if ok == false { server.mapCallQueue[sname] = make(chan *CQueueRpcData, 10240) - util.Go(server.ProcessQueue, sname) + util.GoRecover(server.ProcessQueue,-1, sname) } if useName { sname = name @@ -612,7 +612,8 @@ func (server *Server) ServeCodec(codec ServerCodec) { wg.Add(1) //queueMode //fmt.Print(queueMode) - go service.call(server, sending, wg, mtype, req, argv, replyv, codec) + util.Go(service.call,server, sending, wg, mtype, req, argv, replyv, codec) + //go service.call(server, sending, wg, mtype, req, argv, replyv, codec) } // We've seen that there are no more requests. // Wait for responses to be sent before closing codec. diff --git a/util/Coroutine.go b/util/Coroutine.go index 0858fe1..92d6dc7 100644 --- a/util/Coroutine.go +++ b/util/Coroutine.go @@ -6,7 +6,7 @@ import ( "runtime/debug" ) -func F(callback interface{}, args ...interface{}) { +func F(callback interface{},recoverNum int, args ...interface{}) { defer func() { if r := recover(); r != nil { var coreInfo string @@ -17,6 +17,11 @@ func F(callback interface{}, args ...interface{}) { } else { fmt.Print(coreInfo) } + + if recoverNum==-1 ||recoverNum-1 >= 0 { + recoverNum -= 1 + go F(callback,recoverNum, args...) + } } }() @@ -33,5 +38,10 @@ func F(callback interface{}, args ...interface{}) { } func Go(callback interface{}, args ...interface{}) { - go F(callback, args...) + go F(callback,0, args...) } + +//-1表示一直恢复 +func GoRecover(callback interface{},recoverNum int, args ...interface{}) { + go F(callback,recoverNum, args...) +} \ No newline at end of file