2014-09-26 74 views
0

在Unity3D的最新版本(4.5.4)中,是否可以取消掛起的WWW類(HTTP)請求並關閉套接字/連接?我已經嘗試了myWWWObject.Dispose,至少在編輯器播放模式下,它不工作。Unity WWW取消請求並關閉套接字/連接

This forum post on Unity forums有矛盾的答案。一個人說它是有效的,然後另一個人說它沒有,但是他們提供的答案讓我覺得他們只關心恢復協程而不關閉實際的連接。

我正在寫一個需要在iOS,Android和Facebook Canvas(Web Player)上工作的遊戲,並且我正在使用長輪詢到我自己的服務器。有些時候,我想取消現有的民意調查併發布新調查。在某些情況下(某種奇怪的行爲,但可能),用戶可能會導致這種情況連續發生多次。我不希望所有這些連接在我的服務器或客戶端保持打開狀態,即使我的代碼很容易忽略任何結果/響應。

我大概可以在設計變更的時候解決這個問題,但是如果有強大的方法來關閉/取消/中止/停止請求,寧願不要。我很確定我需要支持的所有3種平臺都有自己的方式來做到這一點,但不知道我想用本地插件而不是WWW類。

回答

1

我不太確定,但我認爲當你關閉套接字連接時,你需要下降到TCP/IP或UDP層。然後,據我所知,你不能從WWW gameObject控制這個層。所以在技術上,即使你取消了'傳輸',套接字將不得不等待TCP/IP超時被操作系統丟棄...我想...

我發現這個鏈接,可能會減少一些光在你的特定問題:http://answers.unity3d.com/questions/676443/wwwdispose-doesnt-work.html

仍然我認爲.Dispose()可能仍然不會像你想要的那樣關閉實際的套接字。只有在通過Thread,TcpListener和TcpClient直接處理的情況下,才允許您發出實際的套接字close()。

例如像:

TcpListener myTcpListener; 
TcpClient myTcpClient; 

void OnApplicationQuit() 
{ 
    try 
    { 
     myTcpClient.Close(); 
     isTrue = false; 
    } 
    catch(Exception e) 
    { 
     Debug.Log(e.Message); 
    } 

    // You must close the tcp listener 
    try 
    { 
     myTcpListener.Stop(); 
     isTrue = false; 
    } 
    catch(Exception e) 
    { 
     Debug.Log(e.Message); 
    } 
} 
+0

無賴,但感謝。我可能需要再次研究,但我不認爲TcpClient跨平臺很好,這就是爲什麼我首先使用WWW的原因。也許我會添加這個作爲功能請求,如果WWW類可以支持它會很好。 – eselk 2014-09-29 19:33:44