Laravel Echo Server - Socket.io - 轮询失败

时间:2018-06-17 15:10:17

标签: laravel sockets socket.io laravel-echo

Laravel Echo Server通过以下方式启动:

laravel-echo-server start并且正常运行:

L A R A V E L  E C H O  S E R V E R

version 1.3.1

Starting server...

✔  Running at localhost on port 6001
✔  Channels are ready.
✔  Listening for http events...
✔  Listening for redis events...

Server ready!

CHANNEL private-user:09222583-ef73-5640-bcc8-062b36c4f380.d3d0a4d2-0c95-5f5f-aea4-1dfe1fa36483

然而,在前端,民意调查似乎失败了。 “网络”选项卡显示请求不断尝试连接并失败:

enter image description here

网址如下所示: https://example.com:6001/socket.io/?EIO=3&transport=polling&t=MGEIXhf

laravel-echo-server.json看起来像这样:

{
    "authHost": "https://example.com",
    "authEndpoint": "/broadcasting/auth",
    "clients": [],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "host": "127.0.0.1",
            "password": "56df4h5dfg4"
        }
    },
    "devMode": false,
    "host": null,
    "port": "6001",
    "protocol": "https",
    "socketio": {},
    "sslCertPath": "/etc/nginx/ssl/example_com/ssl-bundle.crt",
    "sslKeyPath": "/etc/nginx/ssl/example_com/example_com.key",
    "sslCertChainPath": "",
    "sslPassphrase": ""
}

端口6001似乎在ufw

中打开
Status: active

To                         Action      From
--                         ------      ----
...
6001                       ALLOW       Anywhere
...
6001 (v6)                  ALLOW       Anywhere (v6)
...

3 个答案:

答案 0 :(得分:0)

确认您在js文件中也使用了相同的端口号。

import Echo from 'laravel-echo'
window.io = require('socket.io-client');
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'});

答案 1 :(得分:0)

我遇到了完全相同的问题。在我的本地设置中,一切正常,但是在暂存过程中,Droplet ufw阻止了每个传入请求/var/log/ufw.log,表明它们都被阻止了。我已经在ufw中打开了6001,甚至还可以通过IP访问ufw中的所有内容,但是请求仍然被阻止。

尽管我真的不希望有安全隐患,但我暂时禁用了ufw,一切都开始起作用,连接即刻建立,没有超时。然后,我又迅速启用了ufw,一切都继续进行。我在其他浏览器中测试了新的连接-都可以正常工作。

因此,尽管尝试关闭防火墙然后再打开确实是一个很糟糕的建议,但这确实对我有用。

我希望其他人能够以一种安全的方式来诊断和修复此类UFW问题的方法。

答案 2 :(得分:0)

我已经找到了造成问题的原因。

我用ufw设置的第一条规则是允许ssh流量。 然后,我安装了fail2ban,该过程的一部分使用iptables-persistent保存了iptables。

后来我添加了ufw规则以允许6001正常运行。

重启后,即使在ufw的状态输出中将其列为“打开”状态,它也停止处于打开状态-重新启动6001后,它无法正常工作的原因是iptables已恢复,并添加了添加6001规则之前的副本。

因此,如果您运行了iptables持久性,请确保使用

sudo dpkg-reconfigure iptables-persistent

添加任何新的ufw规则后。