断线重连
客户端遇到网络不稳定断线时或者切换网络时,就要进行重连。注意断线重连和自动登录是两个步骤,这里我们先讲网络不稳定断线重连。切换网络和自动登录在后面补充。
普通断线重连
在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() |