ascs 简明开发教程(五):连接状态转换及生命周期管理

31 篇文章 0 订阅
31 篇文章 1 订阅

QQ交流群:198941541

客户端:

multi_client + 断线自动重连(此时开不开启对象重用都一样):

add_socket -> on_connect -> on_recv_error -> on_close -> after_close -> on_connect -> ...

multi_client + 对象重用(关闭自动重连,注意reset是object_pool在重用对象时调用的,之后对象被重用,已经完全代表另一条连接了):

add_socket -> on_connect -> on_recv_error -> on_close -> after_close -> reset -> on_connect -> ...

multi_client + 关闭对象重用和自动重连:

add_socket -> on_connect -> on_recv_error -> on_close -> after_close -> free (c++ keyword)

single_client + 断线自动重连:

on_connect -> on_recv_error -> on_close -> after_close -> on_connect -> ...

single_client + 关闭自动重连:

on_connect -> on_recv_error -> on_close -> after_close

 

服务端:

开启对象重用(注意reset是object_pool在重用对象时调用的,之后对象被重用,已经完全代表另一条连接了):

on_connect -> on_recv_error -> on_close -> after_close -> reset -> on_connect -> ...

关闭对象重用:

on_connect -> on_recv_error -> on_close -> after_close -> free (c++ keyword)

 

由此可见:

1. 如果你想初始化一些东西,在on_connect里面是个不错的选择;

2. 开启对象重用之后,一定要在reset里面把你的状态和数据清理干净,否则被重用之后,留下来的状态和数据就是垃圾;

3. 如果你有资源需要释放,在on_close里面做是最安全的,after_close里面也安全,但要记得调用父类同名函数,否则自动重连功能会失效,on_close则不强求。

 

对象池相关宏:

ASCS_REUSE_OBJECT:开启对象重用;

ASCS_CLEAR_OBJECT_INTERVAL:对象池扫描时间间隔,单位为秒。如果你是长连接,推荐不定义该宏,这样每次有连接断开时会马上移出对象池(如果是客户端,前提是没开启自动重连);如果你是短连接,推荐定义它,这样可以批量的移出对象池(如果是客户端,前提是没开启自动重连),因为操作对象池是有锁的,总之定义与不定义,仅仅是效率上考虑。

 

自动重连接及相关宏:

自动重连接是一个客户端概念,服务端没有。如果想开启自动重连,则定义ASCS_RECONNECT宏为true(默认值,所以无需显示定义为true,需要关闭自动重连才需要显示定义为false),如果以true调用socket的force_shutdown, disconnect和graceful_shutdown主动断开连接,则也会重连且覆盖ASCS_RECONNECT宏(注意仅仅是对这个socket而言,这意味着,当连接下次被动断开时,会执行自动重连,不管ASCS_RECONNECT宏定义为true还是false)。

上一篇:ascs 简明开发教程(4)下一篇:ascs 简明开发教程(6)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值