From 7e72782c16143317d95c3a55bdcdb0c019910c4f Mon Sep 17 00:00:00 2001 From: boyce Date: Fri, 10 Jul 2020 14:54:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=B4=E6=97=B6=E5=86=85?= =?UTF-8?q?=E5=AD=98=E6=B1=A0=E7=9A=84=E5=9B=9E=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpc/client.go | 14 ++++++++++---- rpc/rpchandler.go | 2 +- rpc/server.go | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/rpc/client.go b/rpc/client.go index e421c89..84bf68c 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -114,6 +114,7 @@ func (slf *Client) AsycGo(rpcHandler IRpcHandler,serviceMethod string,callback r InParam,herr := processor.Marshal(args) if herr != nil { + ReleaseCall(call) return herr } @@ -125,19 +126,25 @@ func (slf *Client) AsycGo(rpcHandler IRpcHandler,serviceMethod string,callback r bytes,err := processor.Marshal(request.RpcRequestData) processor.ReleaseRpcRequest(request.RpcRequestData) - if err != nil { + slf.RemovePending(call.Seq) + ReleaseCall(call) return err } + if slf.conn == nil { + slf.RemovePending(call.Seq) + ReleaseCall(call) return fmt.Errorf("Rpc server is disconnect,call %s is fail!",serviceMethod) } + err = slf.conn.WriteMsg(bytes) if err != nil { - call.Err = err + slf.RemovePending(call.Seq) + ReleaseCall(call) } - return call.Err + return err } func (slf *Client) Go(noReply bool,serviceMethod string, args interface{},reply interface{}) *Call { @@ -201,7 +208,6 @@ func (slf *Client) Run(){ continue } - v := slf.FindPending(respone.RpcResponeData.GetSeq()) if v == nil { log.Error("rpcClient cannot find seq %d in pending",respone.RpcResponeData.GetSeq()) diff --git a/rpc/rpchandler.go b/rpc/rpchandler.go index 0ffd63b..10a1406 100644 --- a/rpc/rpchandler.go +++ b/rpc/rpchandler.go @@ -203,8 +203,8 @@ func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) { } } }() - defer processor.ReleaseRpcRequest(request.RpcRequestData) defer ReleaseRpcRequest(request) + defer processor.ReleaseRpcRequest(request.RpcRequestData) v,ok := slf.mapfunctons[request.RpcRequestData.GetServiceMethod()] if ok == false { diff --git a/rpc/server.go b/rpc/server.go index 00cc320..57f1223 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -104,14 +104,14 @@ func (agent *RpcAgent) Run() { req.RpcRequestData = processor.MakeRpcRequest(0,"",false,nil) err = processor.Unmarshal(data,req.RpcRequestData) if err != nil { + log.Error("rpc Unmarshal request is error: %v", err) if req.RpcRequestData.GetSeq()>0 { - rpcError := RpcError("rpc Unmarshal request is error") + rpcError := RpcError(err.Error()) agent.WriteRespone(req.RpcRequestData.GetServiceMethod(),req.RpcRequestData.GetSeq(),nil,&rpcError) processor.ReleaseRpcRequest(req.RpcRequestData) ReleaseRpcRequest(req) continue }else{ - log.Error("rpc Unmarshal request is error: %v", err) //will close tcpconn processor.ReleaseRpcRequest(req.RpcRequestData) ReleaseRpcRequest(req)