workerman客户端连接失败
今天访问客服聊天功能发现不能发送信息,然后看到是因为 WebSocket
连接失败,图如下:
根据字面意思已经了解了问题是因为连接拒绝,那么为什么会拒绝呢?
接下来开始找原因:
- 官网上找常见问题
- 百度
or
Google
很幸运的是在官网上可以找到 客户端连接失败原因
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
接口上。