【问题标题】:Unity WWW cancel request and close socket/connectionUnity WWW取消请求并关闭套接字/连接
【发布时间】:2014-09-28 18:17:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    我不太确定,但我认为当您要关闭套接字连接时,您正在降低到 TCP/IP 或 UDP 层。然后,据我所知,您无法从 WWW 游戏对象控制这一层。因此,从技术上讲,即使您取消“传输”,套接字也必须等待操作系统丢弃 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);
        }
    }
    

    【讨论】:

    • 无赖,但谢谢。我可能需要再次研究,但我认为 TcpClient 不能很好地跨平台工作,这就是我首先使用 WWW 的原因。也许我会将此作为功能请求添加,如果 WWW 类可以支持它会很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多