# 网络通信适配
由于安全限制,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()接收。
# 三、安全域名与跨域
游戏的网络请求需要满足安全域名与跨域要求:
- 安全域名:正式上线版本的网络请求必须使用带证书的 HTTPS / WSS 协议,并在美团游戏开放平台 (opens new window)登记对应的服务器域名白名单。
- 开发阶段:通过
mgc debug进行真机调试时无需登记安全域名,可使用 HTTP / WS 等不带证书的协议;但正式上线必须使用 HTTPS / WSS。 - SSL 证书:访问 HTTPS 请求时请确认证书有效、未过期。
- 资源服务器跨域:游戏加载的远端网络资源(含视频)所在服务器,需允许容器来源(
mgcfile://*)的跨域访问;未配置会导致资源无法加载。