name5566/leaf

关闭回调太慢问题?

Closed this issue · 4 comments

关闭回调太慢问题?

关闭慢是有原因的,具体原因具体分析,但不是框架的原因,而是业务逻辑的需要。比如说,有一些情况下需要等待消息发送成功后才断了网络,这可能会比较慢,当然可以选择强制断开而不等待数据成功发送(这比较快)。如果你说的关闭是服务器关闭,那么服务器还需要等待数据入库等操作完成(否则数据会丢失),这都是比较慢的。

我可能描述的有问题,我重新加一个说明:
1,我先定义了注册了一个关闭的回调,或者是所谓的RPC函数
skeleton.RegisterChanRPC("CloseAgent", rpcCloseAgent)

func rpcCloseAgent(args []interface{}) {
fmt.Print("======rpcCloseAgent1=====")
}

2, 当我调用 oldAgent.Close() rpcCloseAgent函数有执行,但是是在Close之后的逻辑执行完之后
例如:
oldAgent.Close()
fmt.Println("======rpcCloseAgent2=====")
运行结果输出:
======rpcCloseAgent2=====
======rpcCloseAgent1=====
想输出
======rpcCloseAgent1=====
======rpcCloseAgent2=====

3,通过对源码的查看Close()实现为:

func (a *agent) Close() {
a.conn.Close()
}
rpc调用的实现为:
func (a *agent) OnClose() {
if a.gate.AgentChanRPC != nil {
err := a.gate.AgentChanRPC.Call0("CloseAgent", a)
if err != nil {
....
}
}
}
看到这个我想把OnClose() ,Close()调用修如下(发现会卡死):
func (a *agent) Close() {
a.OnClose() //新加
a.conn.Close()
}
4,所以请问怎么样让rpcCloseAgent函数和Close方法同步执行达到
======rpcCloseAgent1=====
======rpcCloseAgent2=====
的效果

按需要增加 myOnClose

按需要增加 myOnClose

搞定了,谢谢