# 网络通信适配

由于安全限制,WebGL(JavaScript 环境)无法直接访问 IP 套接字,System.Net(尤其是 System.Net.Sockets)与 UnityEngine.Network* 在 WebGL 下不可用。本章介绍如何在美团小游戏中适配网络通信。

# 一、HTTP 通信

Unity 在 WebGL 下支持使用 UnityWebRequest。以协程方式发送 GET / POST 的示例:

IEnumerator Get()
{
    UnityWebRequest webRequest = UnityWebRequest.Get("https://your-domain.com");
    yield return webRequest.SendWebRequest();
    if (webRequest.result != UnityWebRequest.Result.Success)
        Debug.Log(webRequest.error);
    else
        Debug.Log(webRequest.downloadHandler.text);
}

IEnumerator Post()
{
    WWWForm form = new WWWForm();
    form.AddField("key", "value");
    UnityWebRequest webRequest = UnityWebRequest.Post("https://your-domain.com", form);
    yield return webRequest.SendWebRequest();
    if (webRequest.result != UnityWebRequest.Result.Success)
        Debug.Log(webRequest.error);
    else
        Debug.Log(webRequest.downloadHandler.text);
}

禁止在 WebGL 下使用阻塞式等待,如 while (!www.isDone) {}。WebGL 为单线程、网络 API 为异步,阻塞等待会导致游戏冻结。请使用协程 + yield 等待下载完成。

# 二、WebSocket 与 UDP 通信

当前不支持 TCP Socket。 需要 TCP 通信时请改用 WebSocket(若服务端为 TCP 接入,可在服务端做 WSS ↔ TCP 代理)。

  • WebSocket:可使用社区第三方插件(如 UnityWebSocket)。若服务端为 TCP 接入,需要 WSS ↔ TCP 的代理层(如 Nginx 反向代理)。处理 WebSocket 数据包时请注意粘包问题,需由游戏服务器自行处理。
  • UDP:可使用 SDK 提供的 UDPSocket(WX.CreateUDPSocket()),通过 Bind() 绑定端口、Send() 发送、OnMessage() 接收。

# 三、安全域名与跨域

游戏的网络请求需要满足安全域名与跨域要求:

  1. 安全域名:正式上线版本的网络请求必须使用带证书的 HTTPS / WSS 协议,并在美团游戏开放平台 (opens new window)登记对应的服务器域名白名单。
  2. 开发阶段:通过 mgc debug 进行真机调试时无需登记安全域名,可使用 HTTP / WS 等不带证书的协议;但正式上线必须使用 HTTPS / WSS。
  3. SSL 证书:访问 HTTPS 请求时请确认证书有效、未过期。
  4. 资源服务器跨域:游戏加载的远端网络资源(含视频)所在服务器,需允许容器来源(mgcfile://*)的跨域访问;未配置会导致资源无法加载。
上次更新: 8/10/2026, 5:36:37 PM