- 协议层设计
- flag
- version
- command
- size
- header
- body
- 架构设计
- 最底层: socket层,做最底层的TCP连接并且对接协议,包括消息的解包
- 中间层: 连接管理层, 用于对底层连接做管理。包括连接的ping策略,重连,握手,连接性能统计。
- 最上层,直接对接业务的一层。包括连接管理层配置信息拉取,日志输出,对外接口等等。
问题记录:
1. windows上面如果网线断开或者关闭wifi设置,socket层read函数是可以感知到的,但是在ios和android上如果手动断网并不能立刻触发read函数返回,可能是移动端在socket层没有对这种情况进行处理。
2. 移动端在应用切到后台后可能会将线程挂起,导致所有的逻辑不再运行。
对于以上两种情况的处理方法:
ios或者android系统通知网络变化时通知socket层进行断开重连调整,可以细化重连策略。
无网->有网: 立即调用正常的重连策略
有网->无网: 间隔时间更长的重连策略
后台->前台: 在底层未感知到网络断开状态下(ping超时等方法),判断最后一条消息距现在的时间一般是4分钟, 就要启动重连机制。这样如果在后台没有感知到断开的情况下,可以立即进行重连。为什么是4分钟,因为一般情况下ios后台应用超过4分钟就会被挂起。