JSONを送受信するには、すべての標準的なRESTfulメソッドを使用してHTTPリクエストを送信し、リクエストの本文にアクセスする必要があります。調べてみた
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