Unity WWW取消请求并关闭套接字/连接

时间:2014-09-26 02:19:27

标签: unity3d

在Unity3D的最新版本(4.5.4)中,是否可以取消挂起的WWW类(HTTP)请求并关闭套接字/连接?我已尝试过myWWWObject.Dispose,至少在编辑器播放模式下,它没有工作。

This forum post on Unity forums有相互矛盾的答案。一个人说它有效,然后另一个人说它没有,但他们提供的答案让我觉得他们只关心恢复协程而不关闭实际的连接。

我正在编写一款需要在iOS,Android和Facebook Canvas(Web Player)上运行的游戏,并且我使用长轮询到我自己的服务器。有时我想取消现有的民意调查并发布新民意调查。在某些情况下(一种奇怪的行为但可能),用户可能会导致这种情况连续多次发生。我不希望所有这些连接在我的服务器或客户端保持打开状态,即使我的代码很容易忽略任何结果/响应。

我可以通过设计更改来解决这个问题,但是如果有一种强大的方法来关闭/取消/中止/停止请求,我宁愿不这样做。我非常确定我需要支持的所有3个平台都有本地方法,但不确定我是否想使用本机插件而不是WWW类。

1 个答案:

答案 0 :(得分: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);
    }
}