我的h5游戏,有一个怪现象
连接WSS服务器
在电脑edge浏览器一连就断开
用chrome浏览器就一切正常
用手机浏览器也是一连就断开
请问应该如何解决?
代码就是普通的 this.websocket = new WebSocket(“wss://wss.asdfasdfa.cn:12345/”)
我的h5游戏,有一个怪现象
连接WSS服务器
在电脑edge浏览器一连就断开
用chrome浏览器就一切正常
用手机浏览器也是一连就断开
请问应该如何解决?
代码就是普通的 this.websocket = new WebSocket(“wss://wss.asdfasdfa.cn:12345/”)
ssl证书配置一下呢
证书呢??????????
后台有证书,还有一个私钥
前台也要证书吗?
你遇到的问题是一个典型的 WebSocket 连接问题,具体来说,WebSocket (wss://) 连接在某些浏览器(如 Edge 和移动设备浏览器)中正常,但在其他浏览器(如 Chrome)中却出现连接断开的现象。
这种情况可能是由以下原因引起的:
不同的浏览器在处理 WebSocket 连接时可能会有不同的安全策略,尤其是在不同平台(PC vs. 移动设备)和不同浏览器之间。以下是一些可能导致问题的因素:
wss:// 连接(即 WebSocket over SSL)有更严格的证书验证要求。如果你使用的是自签名证书或者证书未正确配置,某些浏览器可能会拒绝连接。wss:// 连接时。如果服务器的 SSL 配置不支持较新的协议版本,浏览器可能无法建立连接。确保你的 wss:// 服务器使用的是有效的 SSL 证书,并且证书链完整。你可以使用像 SSL Labs 这样的工具检查服务器的 SSL 配置。
如果是连接不稳定的问题,可以在客户端实现重试机制,确保在连接断开时能够自动重连。例如,使用如下代码来检测 WebSocket 断开并重新连接:
let ws;
function connectWebSocket() {
ws = new WebSocket('wss://your-websocket-server.com');
ws.onopen = () => {
console.log('WebSocket connected');
};
ws.onclose = () => {
console.log('WebSocket disconnected, retrying...');
setTimeout(connectWebSocket, 1000); // 延迟1秒后重连
};
ws.onerror = (error) => {
console.log('WebSocket error:', error);
};
}
// 初始连接
connectWebSocket();
确保服务器正确设置了 CORS(跨域资源共享)头,允许来自你客户端域的连接。可以通过服务器的 HTTP 响应头进行配置:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
检查你的设备是否使用了代理、VPN 或防火墙。如果是移动设备出现问题,尝试切换到不同的网络环境(如 Wi-Fi 连接)。对于桌面浏览器,检查防火墙设置。
确保你使用的 WebSocket 协议和方法在所有目标浏览器中都是支持的。可以查看 MDN 的 WebSocket 文档 来确保你的实现符合规范。
在浏览器的开发者工具中,查看 Console 和 Network 标签中的错误信息。特别是 WebSocket 连接的错误,可以帮助你识别问题的根源。
问题的根本原因可能是浏览器安全策略、WebSocket 服务器配置或网络环境问题。你可以从以下几个方向进行排查:
通过这些方法,你应该能更好地定位问题并解决它。
看demo,人家客户端的DEMO,是带证书的。
安全策略问题:
1 域名要有公开签名的证书,不能是私人签名。
2 访问wss的网页也得是https的。
服务器是这个,检查证书好像都对,签名是阿里云3个月个人免费证书
wss://wss.iotlabor.cn:12348
游戏是用这个链接打开
https://https.iotlabor.cn/public/static/build/web-mobile-001/
启动服务器的方法,完全用现成的执行文件测试能否建立连接(实际测试只有Chrome浏览器能验证成功,其它浏览器一连上就立刻断开)
.\openssl.exe s_server -accept 12348 -cert .\wss.iotlabor.cn_public.crt -key .\wss.iotlabor.cn.key -CAfile wss.iotlabor.cn_chain.crt
下面是Chrome浏览器在游戏里点登录的反应(正常)
下面是Edge历览器在游戏里点登录的反应(连上瞬间就断开)
你这连接怎么没写端口号? 还是说你niginx配置了?
一般按比例连通有两种情况:
1 niginx 配了多后端,只有某几个后端上有服务。
2 你的服务器收包堵塞,部分请求无法响应
你这个都不像啊
我的后台服务器是直接支持SSL TLS
没有用nginx转发
直接对外就是443端口
昨天把中间证书配好后,我在家里用WiFi上网页和微信小程序,平均下来大概10次能量成功一次,一旦连成功了,后面一切都正常。
但是今天我把手机从家里拿出来用流量
网页和微信小程序试了几十次都是100%的失败。
这种写个最简单的测试代码看下啊,,
今天不论是WiFi还是流量都连不上了
我听说443端口要备案的,不知道是不是ISP给我断了
我下次换个端口试试
感觉是tls版本支持问题,我这边用命令行curl https://wss2.iotlabor.cn:443也是连不上,但是chrome、edge浏览器都可以。wireshark抓了下包,看上去是握手的时候用的tls版本不一样。
.\openssl.exe s_client -connect wss2.iotlabor.cn:12348
这个命令在服务器执行100%成功
在家里打开失败几十次会成功一次。
提了阿里云工单,说是我没有接入备案,他们在内网访问时100%成功,
我自己用IP访问也是100%成功。
但是IP访问的证书和访问地址必须一样,IP访问肯定不行。
现在正在走备案接入流程,先等阿里云初审,之后由阿里云转交广东通信管理局正式审核。