合并Service中的Event、RpcResponse、RpcRequest管道

This commit is contained in:
duanhf2012
2021-07-20 14:35:30 +08:00
parent c9f47d796c
commit a6ea25bba0
8 changed files with 215 additions and 169 deletions

View File

@@ -67,11 +67,11 @@ func (client *Client) Connect(id int,addr string) error {
}
func (client *Client) startCheckRpcCallTimer(){
t:=timer.NewTimer(3*time.Second)
t:=timer.NewTimer(5*time.Second)
for{
select {
case timer:=<- t.C:
timer.SetupTimer(time.Now())
case cTimer:=<- t.C:
cTimer.SetupTimer(time.Now())
client.checkRpcCallTimeout()
}
}
@@ -83,7 +83,7 @@ func (client *Client) startCheckRpcCallTimer(){
func (client *Client) makeCallFail(call *Call){
client.removePending(call.Seq)
if call.callback!=nil && call.callback.IsValid() {
call.rpcHandler.(*RpcHandler).callResponseCallBack <-call
call.rpcHandler.PushRpcResponse(call)
}else{
call.done <- call
}
@@ -310,7 +310,7 @@ func (client *Client) Run(){
}
if v.callback!=nil && v.callback.IsValid() {
v.rpcHandler.(*RpcHandler).callResponseCallBack <-v
v.rpcHandler.PushRpcResponse(v)
}else{
v.done <- v
}

View File

@@ -46,15 +46,19 @@ type RawRpcCallBack interface {
CB(data interface{})
}
type IRpcHandlerChannel interface {
PushRpcResponse(call *Call) error
PushRpcRequest(rpcRequest *RpcRequest) error
}
type RpcHandler struct {
callRequest chan *RpcRequest
IRpcHandlerChannel
rpcHandler IRpcHandler
mapFunctions map[string]RpcMethodInfo
mapRawFunctions map[uint32] RawRpcCallBack
funcRpcClient FuncRpcClient
funcRpcServer FuncRpcServer
callResponseCallBack chan *Call //异步返回的回调
}
type TriggerRpcEvent func(bConnect bool,clientSeq uint32,nodeId int)
@@ -64,17 +68,13 @@ type IRpcListener interface {
}
type IRpcHandler interface {
IRpcHandlerChannel
GetName() string
InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer)
InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer,rpcHandlerChannel IRpcHandlerChannel)
GetRpcHandler() IRpcHandler
PushRequest(callInfo *RpcRequest) error
HandlerRpcRequest(request *RpcRequest)
HandlerRpcResponseCB(call *Call)
GetRpcRequestChan() chan *RpcRequest
GetRpcResponseChan() chan *Call
CallMethod(ServiceMethod string,param interface{},reply interface{}) error
AsyncCall(serviceMethod string,args interface{},callback interface{}) error
Call(serviceMethod string,args interface{},reply interface{}) error
Go(serviceMethod string,args interface{}) error
@@ -100,9 +100,8 @@ func (handler *RpcHandler) GetRpcHandler() IRpcHandler{
return handler.rpcHandler
}
func (handler *RpcHandler) InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer) {
handler.callRequest = make(chan *RpcRequest,1000000)
handler.callResponseCallBack = make(chan *Call,1000000)
func (handler *RpcHandler) InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer,rpcHandlerChannel IRpcHandlerChannel) {
handler.IRpcHandlerChannel = rpcHandlerChannel
handler.mapRawFunctions = make(map[uint32] RawRpcCallBack)
handler.rpcHandler = rpcHandler
handler.mapFunctions = map[string]RpcMethodInfo{}
@@ -114,8 +113,8 @@ func (handler *RpcHandler) InitRpcHandler(rpcHandler IRpcHandler,getClientFun Fu
// Is this an exported - upper case - name?
func isExported(name string) bool {
rune, _ := utf8.DecodeRuneInString(name)
return unicode.IsUpper(rune)
r, _ := utf8.DecodeRuneInString(name)
return unicode.IsUpper(r)
}
// Is this type exported or a builtin?
@@ -190,23 +189,6 @@ func (handler *RpcHandler) RegisterRpc(rpcHandler IRpcHandler) error {
return nil
}
func (handler *RpcHandler) PushRequest(req *RpcRequest) error{
if len(handler.callRequest) >= cap(handler.callRequest){
return fmt.Errorf("RpcHandler %s Rpc Channel is full", handler.GetName())
}
handler.callRequest <- req
return nil
}
func (handler *RpcHandler) GetRpcRequestChan() chan *RpcRequest {
return handler.callRequest
}
func (handler *RpcHandler) GetRpcResponseChan() chan *Call{
return handler.callResponseCallBack
}
func (handler *RpcHandler) HandlerRpcResponseCB(call *Call){
defer func() {
if r := recover(); r != nil {

View File

@@ -185,7 +185,7 @@ func (agent *RpcAgent) Run() {
continue
}
err = rpcHandler.PushRequest(req)
err = rpcHandler.PushRpcRequest(req)
if err != nil {
rpcError := RpcError(err.Error())
@@ -268,7 +268,6 @@ func (server *Server) selfNodeRpcHandlerGo(processor IRpcProcessor,client *Clien
return pCall
}
}
//req.inputArgs = inputArgs
if noReply == false {
client.AddPending(pCall)
@@ -303,7 +302,7 @@ func (server *Server) selfNodeRpcHandlerGo(processor IRpcProcessor,client *Clien
}
}
err := rpcHandler.PushRequest(req)
err := rpcHandler.PushRpcRequest(req)
if err != nil {
ReleaseRpcRequest(req)
pCall.Err = err
@@ -352,12 +351,12 @@ func (server *Server) selfNodeRpcHandlerAsyncGo(client *Client,callerRpcHandler
if Returns!=nil {
pCall.Reply = Returns
}
pCall.rpcHandler.(*RpcHandler).callResponseCallBack <-pCall
pCall.rpcHandler.PushRpcResponse(pCall)
ReleaseRpcRequest(req)
}
}
err := rpcHandler.PushRequest(req)
err := rpcHandler.PushRpcRequest(req)
if err != nil {
ReleaseRpcRequest(req)
return err