You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity WebGL使用M2MQTT出现SocketException:无法解析主机

Unity WebGL 下 M2MQTT 连接问题分析及解决

核心原因:Unity WebGL 不支持原生 TCP/UDP 套接字

Unity WebGL 运行在浏览器沙箱环境中,受浏览器安全机制限制,无法直接使用原生 TCP/UDP 套接字——而 M2MQTT 默认采用 TCP 协议进行 MQTT 通信,这就是编辑器/Windows 构建正常,但 WebGL 报错 SocketException: Could not resolve host 的根本原因。防火墙关闭、CORS 处理解决的是网络外部限制,无法绕过浏览器的套接字 API 限制。

可行解决方案:切换为 MQTT over WebSocket

要在 WebGL 环境中使用 MQTT,必须改用基于 WebSocket 的 MQTT 协议(即 MQTT over WebSocket),步骤如下:

  • 确认你的 MQTT 代理(broker)支持 WebSocket 连接(主流代理如 EMQX、Mosquitto 均支持,需在代理配置中开启 WebSocket 端口,通常为 8083 或 443)
  • 修改 M2MQTT 连接代码,指定使用 WebSocket 方式:
    // 示例:创建支持 WebSocket 的 M2MQTT 客户端
    string brokerAddress = "你的代理域名或IP";
    int webSocketPort = 8083; // 对应代理的 WebSocket 端口
    MqttClient client = new MqttClient(brokerAddress, webSocketPort, true, null, null, MqttSslProtocols.None);
    
    // 后续连接、订阅逻辑与原代码一致
    client.Connect("webgl-client-id");
    
  • 确保浏览器端 CORS 配置正确:MQTT 代理需允许 WebGL 应用所在域名的跨域请求,或将 WebGL 应用部署在与代理同域名下。

额外注意事项

  • 不要尝试绕过浏览器套接字限制的方法,这违反浏览器安全规范,无法通过现代浏览器审核。
  • 若使用自签名证书的 HTTPS WebSocket 连接,需在浏览器中信任该证书,否则会出现连接失败。

内容的提问来源于stack exchange,提问作者user20785749

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:05:22