项目安装完成后,如果出现 WebSocket 无法连接的问题,可以按以下步骤逐一排查:
1、检查服务端进程是否开启 WebSocket 支持
首先在服务器上使用 curl 测试服务端是否已正确开启 WebSocket:
curl --http1.1 -i \
-H "Upgrade: websocket" \
-H "Connection: Upgrade" \
-H "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==" \
-H "Sec-WebSocket-Version: 13" \
http://localhost:20200/ws
- 请将 20200 端口替换为进程实际运行的端口号
- 如果是在 Docker 中运行,请填写宿主机映射的端口(默认 20300)
正常响应示例:
- 如果 http code 是 101 Switching Protocols,则说明进程已正常开启了 WebSocket ,跳转到第三步继续排查。
- 如果 http code 是 200 或者其他非 101 响应,请继续进行下一步。
2、启用 WebSocket 功能
检查项目根目录下 .env 文件中是否启用了 LARAVELS_WEBSOCKET_ENABLE
LARAVELS_WEBSOCKET_ENABLE=true
如果未启用,则修改为 true 并重启进程。
重启进程后,重新执行第一步来验证是否已启用 WebSocket 功能。
3、检查反向代理配置
对照 https://doc.crmeb.com/tuoluojiang/tuoluojiang20/21245 中的反向代理配置文件内容,检查反向代理配置文件内容是否一致。
注意 proxy_pass 的目标地址应该指向进程实际监听的端口。
4、其他问题
- 前端是否可以正常访问项目(排除域名和网络问题)
- WebSocket 协议是否和页面协议一致
- 如果网页是 http:// ,WebSocket 应该使用 ws://
- 如果网页是 https:// ,WebSocket 应该使用 wss://
- 可以在浏览器 DevTools 的 Network 中检查 WebSocket 请求。