2011-04-07 61 views
0

我有一個NetConnection對象:超時的AS3事件

myNetConnection = new NetConnection(); 
myNetConnection.addEventListener(NetStatusEvent.NET_STATUS, statusHandler); 
myNetConnection.connect("rtmp://address"); 

而且在處理這樣做:

private function statusHandler(event:NetStatusEvent):void 
      { 
       switch (event.info.code) 
       { 
        case "NetConnection.Connect.Success": 
        { 
         trace("ok"); 
         break; 
        } 
        case "NetConnection.Connect.Failed": 
        { 
         trace("Some problems, NetConnection.Connect.Failed"); 
         break; 
        } 
       } 
      } 

所以,如果一切ok - 我有看到調試控制檯非常快的 「OK」 。 但如果有任何問題 - 「有些問題,NetConnection.Connect.Failed」我看了很久以後等待。 我的問題 - 我如何看到「有些問題,NetConnection.Connect.Failed」更快(因爲「快」)?

回答

2

你很可能不能。事件被儘可能快地觸發,這是連接失敗需要很長時間才能顯現出來。

它在我看來像問題是連接嘗試超時。如果計時器在連接建立之前觸發,Flash會嘗試連接並設置一個計時器。Flash會斷定該資源不可用。你不能立即失敗,因爲在定時器啓動之前連接不會失敗。

Flash無法立即告訴您資源不可用,因爲有時服務器會在毫秒內響應,但有時可能需要幾秒鐘。

2

這裏的問題是,如果Flash Player無法使用正常協議(RTMP,端口1935)連接到服務器,它會自動嘗試使用回退協議和端口建立連接。正常的序列是:

netConnection.connect(「rtmp:// myserver/myapp」); //使用默認端口1935 netConnection.connect(「rtmp:// myserver:443/myapp」); netConnection.connect(「rtmp:// myserver:80/myapp」); netConnection.connect(「rtmpt:// myserver:80/myapp」);

所有這些嘗試都會增加連接的最終超時時間。

此自動重試順序發生 僅當初始連接 指定RTMP協議,並使用 默認端口 - 例如, my_nc.connect( 「RTMP:// MYSERVER/MyApp的」)。

您可以在這裏找到更多的信息here