WebRequest.HttpWebRequest
这个方法几乎完美地工作,但有些情况下会出现问题,例如服务器宕机时,GetResponse函数可能需要几秒钟才能返回结果(因为它是同步方法),在这段时间内冻结应用程序。此方法的异步版本BeginGetResponse,在Unity中似乎仍然会冻结应用程序。
UnityEngine.WWW#
出于某种原因,该方法只支持POST和GET请求。但我还需要PUT和DELETE(标准的RESTful方法),因此没有继续研究它。
System.Threading
为了在不冻结应用程序的情况下运行WebRequest.HttpWebRequest.GetResponse方法,我尝试使用线程。线程在编辑器中似乎可以工作(但非常不稳定-如果在应用程序退出时不停止线程,则即使在停止它后,它也会在编辑器中永远运行),并且当构建到iOS设备时,尝试启动线程会导致应用程序崩溃(我忘记记录错误,现在无法访问)。
在具有桥接到Unity应用程序的本机iOS应用程序中运行线程
荒谬,不会尝试。
UniWeb
这个方法。我想知道他们是如何做到的。
以下是我正在尝试的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