我需要使用所有标准 RESTful 方法发送 HTTP 请求并访问请求的主体,以便使用它发送/接收 JSON。我调查过,
WebRequest.HttpWebRequest
这几乎可以完美运行,但是在某些情况下,例如,如果服务器关闭,GetResponse 函数可能需要几秒钟才能返回——因为它是一个同步方法——在这段时间内冻结应用程序。此方法的异步版本 BeginGetResponse 似乎不能异步工作(无论如何在 Unity 中),因为它仍然会在该期间冻结应用程序。
UnityEngine.WWW#
出于某种原因,仅支持 POST 和 GET 请求——但我还需要 PUT 和 DELETE(标准 RESTful 方法),所以我没有再费心去研究它。
系统线程
为了在不冻结应用程序的情况下运行 WebRequest.HttpWebRequest.GetResponse,我研究过使用线程。线程似乎在编辑器中工作(但似乎非常不稳定 - 如果您在应用程序退出时不停止线程,即使您停止它,它也会永远在编辑器中运行),并且当构建到 iOS 设备时,它会尽快崩溃当我尝试启动一个线程时(我忘记写下错误并且我现在无权访问它)。
在原生 iOS 应用程序中运行线程并连接到 Unity 应用程序
可笑,甚至不会尝试这个。
统一网
这个。我想知道他们是如何管理的。
这是我正在尝试的 WebRequest.BeginGetResponse 方法的示例,
// The RequestState class passes data across async calls.
public class RequestState
{
const int BufferSize = 1024;
public StringBuilder RequestData;
public byte[] BufferRead;
public WebRequest Request;
public Stream ResponseStream;
// Create Decoder for appropriate enconding type.
public Decoder StreamDecode = Encoding.UTF8.GetDecoder();
public RequestState()
{
BufferRead = new byte[BufferSize];
RequestData = new StringBuilder(String.Empty);
Request = null;
ResponseStream = null;
}
}
public class WebRequester
{
private void ExecuteRequest()
{
RequestState requestState = new RequestState();
WebRequest request = WebRequest.Create("mysite");
request.BeginGetResponse(new AsyncCallback(Callback), requestState);
}
private void Callback(IAsyncResult ar)
{
// Get the RequestState object from the async result.
RequestState rs = (RequestState) ar.AsyncState;
// Get the WebRequest from RequestState.
WebRequest req = rs.Request;
// Call EndGetResponse, which produces the WebResponse object
// that came from the request issued above.
WebResponse resp = req.EndGetResponse(ar);
}
}
...基于此: http: //msdn.microsoft.com/en-us/library/86wf6409 (v=vs.71).aspx