首页 > 解决方案 > Laravel Echo Server,不监听频道,但可以处理事件

问题描述

我正在使用 Redis,带有 socket.io、laravel-echo-server 和 VUe。

在我的本地机器上它工作得很好但是当我上传并在服务器中进行配置时唯一的问题是 laravel-echo-server 甚至没有尝试验证或发送错误,但是当我发送或广播事件时工作正常:

当我运行一个事件时,它反映在 Laravel-echo-server:
PRODUCTION SERVER IMAGE
在此处输入图像描述

但它甚至没有尝试监听或验证,这是我在 Vue 中的监听代码:
生产服务器图像

mounted() {
        //LARAVEL ECHO, SOCKET.IO, REDIS, etc
        Echo.private(`messages.${this.user.id}`)
            .listen('NewMessage', (e) => {
                console.log("LLEGÓ MENSAJE NUEVO");
                console.log(e);
                this.handleIncoming(e.message);
            });

但正如我提到的,它在 Laravel-echo-server 控制台中没有显示任何内容。使用相同的配置,这就是它在我的本地机器上的样子:
localhost IMAGE 在此处输入图像描述

正如我所说,它甚至不会尝试验证或连接到通道。

这是我的 laravel-echo-server.json:
生产服务器图像

在此处输入图像描述

我错过了什么吗?为什么它与事件一起工作但没有倾听或至少尝试倾听它们?

太感谢了!

编辑1:

这是我的 .env 文件
生产服务器图像的一部分

BROADCAST_DRIVER=redis
CACHE_DRIVER=file
QUEUE_CONNECTION=redis
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

这是我的 bootstrap.js
生产服务器图像的一部分

import Echo from "laravel-echo"
window.io = require('socket.io-client');

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: '127.0.0.1:6001' //I CHANGED TO STATICALLY GO TO 127.0.0.1
});

这是我的 config/database.php 的一部分:
生产服务器图像 在此处输入图像描述

在 localhost 中它工作得很好,使用 http:127.0.0.1:8000 和 127.0.0.1:6001 作为 laravel echo。

问题是当我在我的 AWS Lightsail 中上传和配置时,域是http://test1.erpnegocios.com,服务器中的路由是 /var/www/html/test1

编辑2: 我一直在阅读帖子说bootstrap.js(socket.io)中的主机必须与laravel-echo-server.json中的主机相同,这就是我使用两个主机的原因:'127.0。 0.1:6001'(如图所示),但问题仍然存在。
如果我运行 sudo service redis-server stop,laravel-echo 控制台停止工作,所以我认为连接良好,但我无法让客户端连接到频道,也无法连接到公共或私人
EDIT 3 Guys 我改变了我的 bootstrap.js和 laravel-echo-server.json 如下:
bootstrap.js

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001' //El host de laravel-echo-server
});

laravel-echo-server.json
{
"authHost": "http://test1.erpnegocios.com:8000",
    "authEndpoint": "/broadcasting/auth",
    "clients": [],
    "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "secureOptions": 67108864,
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    },
    "apiOriginAllow": {
        "allowCors": false,
        "allowOrigin": "",
        "allowMethods": "",
        "allowHeaders": ""
    }
}

我还在我的服务器中打开了端口 8000,现在运行我的 laravel-echo-server 控制台,我看到:

在此处输入图像描述

基本上它现在正在工作,但在公共渠道中,我认为该错误与另一个配置有关,让我解释一下:

服务器的主 IP 是 3.83.87.137 在该服务器中我有多个项目:
/var/www/html/test1
/var/www/html/erp
/var/www/html/test 等

IP (3.83.87.137)指向/var/www/html/erp,但我首先配置和使用test1。我相信我无法进行身份验证,因为将我的 laravel-echo-server.json authHost 指向 3.83.87.137:8000 指向 /var/www/html/erp,对吗?我是否应该更改我的配置以便 3.83.87.137 指向 /var/www/html/oi 可以将我的 laravel-echo-server.json authHost 配置为 3.83.87.137:8000/test1?
非常感谢你的帮助!

标签: laravelvue.jslaravel-echo

解决方案


推荐阅读