Переглянути джерело

MMO-20479: 【优化】网络底层请求超时缩短。 表现: 登录失败之后,再去登录会一直登录不上 TCP连接超时

vajre 3 роки тому
батько
коміт
4e129b1411

+ 23 - 18
Common/Pomelo/pomelo-dotnetClient/src_new/client/PomeloClient.TCP.cs

@@ -135,31 +135,20 @@ namespace Pomelo.DotNetClient
             };
             socket.Client.Blocking = true;
 
-            //connect
             try
             {
                 log.Debug("===========socket connect call socket.BeginConnect " + _NetInfo._host + ":" + _NetInfo._port);
                 _received_heartbeat();
-                socket.BeginConnect(_NetInfo._host, _NetInfo._port, new AsyncCallback(OnConnect), socket);
+                conResult = socket.BeginConnect(_NetInfo._host, _NetInfo._port, new AsyncCallback(OnConnect), socket);
             }
             catch (Exception err)
             {
                 if (err is SocketException)
                 {
                     JsonObject json = new JsonObject();
-                    switch ((err as SocketException).SocketErrorCode)
-                    {
-                        case SocketError.TimedOut:
-                            DoNetState(NetWorkState.TIMEOUT);
-                            json["s2c_code"] = 501;
-                            json["s2c_msg"] = err.Message;
-                            break;
-                        default:
-                            DoNetState(NetWorkState.ERROR);
-                            json["s2c_code"] = 500;
-                            json["s2c_msg"] = err.Message;
-                            break;
-                    }
+                    DoNetState(NetWorkState.ERROR);
+                    json["s2c_code"] = 500;
+                    json["s2c_msg"] = err.Message;
                     listener.OnConnected(socket.Client, json);
                 }
                 else
@@ -170,6 +159,7 @@ namespace Pomelo.DotNetClient
             }
         }
 
+
         private void OnConnect(IAsyncResult ar)
         {
             //reset stream
@@ -192,8 +182,6 @@ namespace Pomelo.DotNetClient
                     log.Debug("socket connect faile ");
                     this._set_net_state(NetWorkState.DISCONNECTED);
                 }
-
-
             }
             catch (Exception e)
             {
@@ -229,8 +217,26 @@ namespace Pomelo.DotNetClient
             return false;
         }
 
+        IAsyncResult conResult;
+        private float conTime;
         public virtual void update(float deltime)
         {
+            if (mCurStatus == NetWorkState.CONNECTING)
+            {
+                conTime += deltime * 1000;
+                if (conTime > _NetInfo._timeout && conResult.IsCompleted == false)
+                {
+                    conTime = 0;
+                    socket.Client.Close();
+                    socket.Close();
+                    socket = null;
+                }
+            }
+            else
+            {
+                conTime = 0;
+            }
+
             ProcessMsg();
         }
 
@@ -318,7 +324,6 @@ namespace Pomelo.DotNetClient
                     socket.Client.Shutdown(SocketShutdown.Both);
                     socket.Client.Close();
                     //socket.GetStream().Close();
-           
                     socket.Close();
                     socket = null;