workerman客户端连接失败
今天访问客服聊天功能发现不能发送信息,然后看到是因为 WebSocket 连接失败,图如下:
根据字面意思已经了解了问题是因为连接拒绝,那么为什么会拒绝呢?
接下来开始找原因:
- 官网上找常见问题
- 百度
orGoogle
很幸运的是在官网上可以找到 客户端连接失败原因
connection refuse(连接拒绝)
一般是以下原因:
1、客户端连接的端口错了
2、客户端连接的域名或者ip错了
3、如果客户端使用了域名连接,域名可能指向了错误的服务器ip
4、服务端没有启动或者端口没有被监听
5、使用了网络代理软件
6、服务端监听ip与访问地址不在一个地址段。例如服务端监听127.0.0.1,则客户端只能通过127.0.0.1连接,不能通过局域网ip或者外网ip连接。建议监听地址设置为0.0.0.0,这样本机、内网、外网都可以连接。
仔细排查了问题,发现是因为 http 与 https 的问题引起的:
websocket 与两种协议的对应关系如下
http -> new WebSocket(‘ws://xxx’)
https -> new WebSocket(‘wss://xxx’)
后端启动的时候已经根据证书判断使用的是 https 协议,所以说前端连接的时候应该使用 wss ,而我登录的后台使用的 http ,所以前端根据协议使用了 ws 导致连接失败,将协议改为 https 就可以正常使用了。
还有一个办法就是将 http 请求利用 Nginx 代理到 https 接口上。
本文介绍了作者在使用workerman客户端时遇到的WebSocket连接失败问题,问题源于HTTP与HTTPS协议的混淆。当后端基于HTTPS启动时,前端仍使用HTTP连接导致连接拒绝。解决方案包括修改前端协议为WSS或通过Nginx代理HTTP到HTTPS接口。通过排查和理解协议对应关系,成功解决了连接问题。
7761

被折叠的 条评论
为什么被折叠?



