美文网首页
在Unity中的三种Http通信方式

在Unity中的三种Http通信方式

作者: LEO_青蛙 | 来源:发表于2021-12-23 12:07 被阅读0次

    1、WWW(基于协程,不适用于线程)

    IEnumerator WWWGet()
    {
        using (WWW www = new WWW("http://127.0.0.1:9997/gameInit?uid=7"))
        {
            yield return www;
            if (www.error != null)
            {
                Debug.Log(www.error);
            }
            else
            {
                Debug.Log(www.text.ToString());
            }
            www.Dispose();//释放
        }
    }
    
    IEnumerator WWWPost()
    {
        Dictionary<string, string> hash = new Dictionary<string, string>();
        hash.Add("Content-Type", "application/json");
        string data = "{\"Name\":\"zhangsan\",\"Password\":\"123456\"}";
        byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes(data);
        WWW www = new WWW("http://127.0.0.1:9997/login", bs, hash);
        
        yield return www;
        if (www.error != null)
        {
                Debug.Log(www.error);
        }
        else
        {
            Debug.Log(www.text.ToString());
        }
        www.Dispose();//释放
    }
    

    2、UnityWebRequest(基于协程,不适用于线程)

    IEnumerator GetRequest()
    {
        string url = "https://www.baidu.com/";
        using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
        {
    
            //设置header
            webRequest.SetRequestHeader("Content-Type", "application/json");
            webRequest.SetRequestHeader("authKey", "leohui");
    
            yield return webRequest.SendWebRequest();
    
            if (webRequest.isHttpError || webRequest.isNetworkError)
            {
                Debug.LogError(webRequest.error);
            }
            else
            {
                Debug.Log(webRequest.downloadHandler.text);
            }
        }
    }
    
    IEnumerator PostRequest()
    {
        string url = "https://www.baidu.com/";
        using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
        {
            string data = "{\"Name\":\"zhangsan\",\"Password\":\"123456\"}";
            byte[] bodyRaw = Encoding.UTF8.GetBytes(data);
            webRequest.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
            webRequest.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
    
            //设置header
            webRequest.SetRequestHeader("Content-Type", "application/json");
            webRequest.SetRequestHeader("authKey", "leohui");
    
            yield return webRequest.SendWebRequest();
    
            if (webRequest.isHttpError || webRequest.isNetworkError)
            {
                Debug.LogError(webRequest.error);
            }
            else
            {
                Debug.Log(webRequest.downloadHandler.text);
            }
        }
    }
    

    3、HttpWebRequest(C#原生的HttpWebRequest,同步接口,阻塞等待结果返回,适用于线程)

    在Unity中,使用C#原生的HttpWebRequest,若是数据较大,会卡顿,主要因为Unity单线程,HttpWebRequest不能异步执行,但适用于多线程。

    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    request.ReadWriteTimeout = ReadWriteTimeOut;
    request.Timeout = TimeOutWait;
    //设置Range值,断点续传
    request.AddRange((int)startPos);
    HttpWebResponse respone = (HttpWebResponse)request.GetResponse();
    Stream ns = respone.GetResponseStream();
    ns.ReadTimeout = TimeOutWait;
    byte[] bytes = new byte[oneReadLen];
    int readSize = ns.Read(bytes, 0, oneReadLen); // 读取第一份数据
    while (readSize > 0)
    {
         fs.Write(bytes, 0, readSize); // 将下载到的数据写入临时文件
         // 往下继续读取
         readSize = ns.Read(bytes, 0, oneReadLen);
    }
    

    相关文章

      网友评论

          本文标题:在Unity中的三种Http通信方式

          本文链接:https://www.haomeiwen.com/subject/xqshqrtx.html