HttpClient 和 Unity 的 UnityWebRequest/WWW API 的区别
Posted
技术标签:
【中文标题】HttpClient 和 Unity 的 UnityWebRequest/WWW API 的区别【英文标题】:Difference between HttpClient and Unity's UnityWebRequest/WWW API 【发布时间】:2018-10-14 01:59:06 【问题描述】:Unity 现在支持 .NET 4.5,我可以使用来自 System.Net.Http
命名空间的 HttpClient
类。这很好,因为我有现有的客户端库,因此很容易重用。
有人知道使用 mono HttpClient 和 Unity 自己的网络 类之间的内部区别吗?
恐怕 HttpClient 没有针对不同平台进行优化,因此可能会导致麻烦或速度较慢。
【问题讨论】:
【参考方案1】:两者之间有很多不同。
UnityWebRequest
不允许您使用更改某些标题。使用HttpClient
,您几乎可以更改任何标题。
UnityWebRequest
的使用目的是不用担心线程或异步的东西。您所做的就是使用协程等待请求。整个线程的东西已经在原生端为你完成了。
某些平台不支持 System.Net
命名空间中的任何内容。其中之一是WebGL
。这意味着当您将平台切换到 WebGL 时,HttpClient
甚至不会编译。 UnityWebRequest
与 WebGL 配合得很好。
UnityWebRequest
用于更轻松地下载内存中的数据并将数据转换为 Unity 资源,例如AudioClip
、VideoClip
、AssetBundle
、Texture2D
等。使用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 中不可用的线程。以上是关于HttpClient 和 Unity 的 UnityWebRequest/WWW API 的区别的主要内容,如果未能解决你的问题,请参考以下文章
Unity安装配置Python使用protobuf转换Excel表格数据并在unit中使用
Unity安装配置Python使用protobuf转换Excel表格数据并在unit中使用