断线重连
客户端遇到网络不稳定断线时或者切换网络时,就要进行重连。注意断线重连和自动登录是两个步骤,这里我们先讲网络不稳定断线重连。切换网络和自动登录在后面补充。
普通断线重连
在NetManager中添加m_IsDisconnected变量、m_IsFirstConnected和m_IsReconnect变量,第一个表示是否已经断线,第二个表示是否是第一次成功连接服务端,第三个表示是否是重连
1 | //链接状态 |
在NetManager的ReallyClose方法中,将m_IsDisconnected变量设为true
1 | void ReallyClose(bool normal = true) |
在NetManager.ConnectCallback中,将m_IsFirstConnected变量设为true
1 | /// <summary> |
在NetManager中添加ReConnect方法
1 | /// <summary> |
在NetManager.Update方法中添加重连逻辑
1 | public void Update() |
注意
ReConnect调用的是Connect,开启的是一个异步方法,所以在Update方法中调用了ReConnect();后紧接着m_IsDisconnected = false;我们不能在连接成功的回调(ConnectCallback)中将m_IsDisconnected = false;,那样的话在Update中会一直调用ReConnect方法
自动登录
在后面补充完数据库相关内容后,会添加断线重连自动登录的内容。
网络切换断线重连
当客户端网络切换时,需要重新连接服务器,我们每隔一秒对当前网络和上次网络进行判断,如果不同就进行重连。
在NetManager中声明变量
1 | private NetworkReachability m_CurNetwork = NetworkReachability.NotReachable; |
然后声明一个协程
1 | public IEnumerator CheckNet() |
注意,
ReConnect其实是一个异步方法,它后面的m_CurNetwork = Application.internetReachability;最好在回调方法内执行。否则如果这里重连失败,这个协程只能执行一次。(假设我们还是这么写,并且重连失败,会等到心跳包断开和服务器的连接,进行普通断线重连)
在NetTest中开启协程
1 | void Start() |


