我正在解决Unity中WebGL使用Mirror进行网络同步的工作,期间遇到了很多坑…记录一下
快速开始Mirror
按照正常的逻辑,按照教程部署服务端和客户端,局域网下一切都很OK。当我开开心心的绑定好控制器摇杆和人物动画后部署到公网环境。噩梦开始了。。。
首先说明一下我的服务器配置和客户端配置
服务器是一个Win11的测试服务器,通过Natapp暴露公网IP ,客户机是部署到阿里云的https服务器(注意这个HTTPS是大坑)
第一次碰壁
打包到服务器上后报错
SocketException: Success
at System.Net.Sockets.Socket…ctor (System.Net.Sockets.AddressFamily addressFamily, System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType) [0x00000] in <00000000000000000000000000000000>:0
然后翻看了Mirror的文档,发现Web中只能使用WebSocket进行通信,找到了这个资源
SimpleWebTransport
然后替换自带的Trans,就会强制以Socet进行通信了
第二次碰壁:
当部署到https服务器上后,无法创建角色。仍然直接报错。
at System.Net.Sockets.Socket…ctor (System.Net.Sockets.AddressFamily addressFamily, System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType) [0x00000] in <00000000000000000000000000000000>:0
经过各种查证,发现是https服务器似乎没有开启wss通信。触碰了安全机制直接被杀死
在本地是完全OK的,所以我猜测是https服务器的问题,解决方式是在Unity的Mirror设置中开启WSS
第三次碰壁
部署好WSS后,发现ping不上websocket,提示握手失败什么的。大概了解了一下机制。应该是服务端没有部署SSL的锅。
于是我在阿里云申请了一个子域名,申请了一个免费证书。并将pfx文件导入后用JSON指认(客户端不需要证书哈,因为客户端本身就在HTTPS服务器下)。
成功~~~