mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
优化rpc
This commit is contained in:
@@ -273,25 +273,7 @@ func (handler *RpcHandler) HandlerRpcRequest(request *RpcRequest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//复制输入参数
|
paramList = append(paramList, reflect.ValueOf(request.inParam))
|
||||||
iParamValue := reflect.New(v.inParamValue.Type().Elem())
|
|
||||||
iParam := iParamValue.Interface()
|
|
||||||
_, processor := GetProcessorType(request.inParam)
|
|
||||||
bytes,err := processor.Marshal(request.inParam)
|
|
||||||
if err == nil {
|
|
||||||
err = processor.Unmarshal(bytes,iParam)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
errM := "RpcHandler " + handler.rpcHandler.GetName() + "."+ request.RpcRequestData.GetServiceMethod()+" deep copy inParam is error:" + err.Error()
|
|
||||||
log.SError(errM)
|
|
||||||
if request.requestHandle != nil {
|
|
||||||
request.requestHandle(nil, RpcError(errM))
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
paramList = append(paramList, iParamValue)
|
|
||||||
var oParam reflect.Value
|
var oParam reflect.Value
|
||||||
if v.outParamValue.IsValid() {
|
if v.outParamValue.IsValid() {
|
||||||
if request.localReply != nil {
|
if request.localReply != nil {
|
||||||
@@ -306,7 +288,6 @@ func (handler *RpcHandler) HandlerRpcRequest(request *RpcRequest) {
|
|||||||
request.requestHandle(nil, RpcError(rErr))
|
request.requestHandle(nil, RpcError(rErr))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
returnValues := v.method.Func.Call(paramList)
|
returnValues := v.method.Func.Call(paramList)
|
||||||
errInter := returnValues[0].Interface()
|
errInter := returnValues[0].Interface()
|
||||||
if errInter != nil {
|
if errInter != nil {
|
||||||
|
|||||||
@@ -335,8 +335,23 @@ func (server *Server) selfNodeRpcHandlerAsyncGo(client *Client, callerRpcHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
_, processor := GetProcessorType(args)
|
_, processor := GetProcessorType(args)
|
||||||
|
inParamValue := reflect.New(reflect.ValueOf(args).Type().Elem())
|
||||||
|
//args
|
||||||
|
//复制输入参数
|
||||||
|
iParam := inParamValue.Interface()
|
||||||
|
bytes,err := processor.Marshal(args)
|
||||||
|
if err == nil {
|
||||||
|
err = processor.Unmarshal(bytes,iParam)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
errM := errors.New("RpcHandler " + handlerName + "."+serviceMethod+" deep copy inParam is error:" + err.Error())
|
||||||
|
log.SError(errM.Error())
|
||||||
|
return errM
|
||||||
|
}
|
||||||
|
|
||||||
req := MakeRpcRequest(processor, 0, 0, serviceMethod, noReply, nil)
|
req := MakeRpcRequest(processor, 0, 0, serviceMethod, noReply, nil)
|
||||||
req.inParam = args
|
req.inParam = iParam
|
||||||
req.localReply = reply
|
req.localReply = reply
|
||||||
|
|
||||||
if noReply == false {
|
if noReply == false {
|
||||||
@@ -370,7 +385,7 @@ func (server *Server) selfNodeRpcHandlerAsyncGo(client *Client, callerRpcHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := rpcHandler.PushRpcRequest(req)
|
err = rpcHandler.PushRpcRequest(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ReleaseRpcRequest(req)
|
ReleaseRpcRequest(req)
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user