【问题标题】:Difference between HttpClient and Unity's UnityWebRequest/WWW APIHttpClient 和 Unity 的 UnityWebRequest/WWW API 的区别
【发布时间】:2018-10-14 01:59:06
【问题描述】:

Unity 现在支持 .NET 4.5,我可以使用来自 System.Net.Http 命名空间的 HttpClient 类。这很好,因为我有现有的客户端库,因此很容易重用。

有人知道使用 mono HttpClientUnity 自己的网络 类之间的内部区别吗?

恐怕 HttpClient 没有针对不同平台进行优化,因此可能会导致麻烦或速度较慢。

【问题讨论】:

    标签: c# .net unity3d mono dotnet-httpclient


    【解决方案1】:

    两者之间有很多不同。

    • UnityWebRequest 不允许您使用更改某些标题。使用HttpClient,您几乎可以更改任何标题。

    • UnityWebRequest 的使用目的是不用担心线程或异步的东西。您所做的就是使用协程等待请求。整个线程的东西已经在原生端为你完成了。

    • 某些平台不支持 System.Net 命名空间中的任何内容。其中之一是WebGL。这意味着当您将平台切换到 WebGL 时,HttpClient 甚至不会编译。 UnityWebRequest 与 WebGL 配合得很好。

    • UnityWebRequest 用于更轻松地下载内存中的数据并将数据转换为 Unity 资源,例如AudioClipVideoClipAssetBundleTexture2D 等。使用HttpClient,您将不得不编写大量代码来检索这些数据,或者可能必须在收到数据后将数据保存在光盘上,以便能够将它们转换为 Unity 资源形式。

    • 想要将 SSL 与 UnityWebRequest 一起使用?祝你好运!您最终只会遇到模棱两可的“未知错误” 错误。当您的HttpClient 中涉及 SSL 时,可以选择。

    对于我刚才提到的所有内容,您应该移植您的代码以使用 UnityWebRequest,除非您正在执行 UnityWebRequest 不支持的操作。

    【讨论】:

    • 感谢您的回答。很遗憾,因为我们有使用 SSL 的要求。
    • 我刚刚使用 Unity 2018.2.7f1 进行了测试,UnityWebRequest 现在似乎可以使用 HTTPS (SSL)
    • @Buzzrick 是的,他们最近(几个月前)增加了对此的支持。虽然这还不够成熟,无法使用,因为我已经看到UnityWebRequest 的许多 ssl 问题。一旦它足够成熟,我将编辑此答案以提及这一点。
    • 您知道HttpClient 不起作用的一些平台列表吗?谢谢。例如。我从我的同事那里听说System.Net.HttpWebRequest 在 Android 模拟器中不起作用,但在 Android 本身上起作用。
    • 实际上,至少从 2018.3.0 开始,您实际上可以为 WebGL 编译 HttpClient,但它仍然无法正常工作,因为它依赖于 JS 中不可用的线程。
    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 2017-05-10
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多