diff --git a/rpc/client.go b/rpc/client.go index 5237959..da94948 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -135,13 +135,13 @@ type RpcRequest struct { Seq uint64 // sequence number chosen by client ServiceMethod string // format: "Service.Method" NoReply bool //是否需要返回 - //packbody InParam []byte + + //other data localReply interface{} localParam interface{} //本地调用的参数列表 requestHandle RequestHandler - callback *reflect.Value } diff --git a/rpc/server.go b/rpc/server.go index 6709fb7..0a43924 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -115,22 +115,24 @@ func (agent *RpcAgent) Run() { for { data,err := agent.conn.ReadMsg() if err != nil { - log.Debug("read message: %v", err) + log.Error("read message: %v", err) + //will close tcpconn break } - if processor==nil{ - log.Error("Rpc Processor not set!") - continue - } - - var req RpcRequest //解析head + var req RpcRequest err = processor.Unmarshal(data,&req) if err != nil { - log.Debug("processor message: %v", err) - agent.Close() - break + if req.Seq>0 { + rpcError := RpcError("rpc Unmarshal request is error") + agent.WriteRespone(req.ServiceMethod,req.Seq,nil,&rpcError) + continue + }else{ + log.Error("rpc Unmarshal request is error: %v", err) + //will close tcpconn + break + } } //交给程序处理 @@ -141,6 +143,7 @@ func (agent *RpcAgent) Run() { log.Debug("rpc request req.ServiceMethod is error") continue } + rpcHandler := agent.rpcserver.rpcHandleFinder.FindRpcHandler(serviceMethod[0]) if rpcHandler== nil { rpcError := RpcError(fmt.Sprintf("service method %s not config!", req.ServiceMethod))