0

创建事件并将其发送到 Redis 后,我尝试订阅该事件并通过 Vue 组件中的 socket.io 向 laravel-echo-server 发出请求。

window.Echo.channel('chat')
    .listen('Message', ({message}) => {
        this.messages.push(message);
    });

我用命令启动了 laravel-echo-server

laravel-echo-server start

{
    "authHost": "http://localhost",
    "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": ""
    }
}

另外,我开始排队。

php artisan queue:work

和 Laravel 开发服务器。

php artisan serve

提交表单后,redis-monitor 显示事件已生成并到达 Redis 服务器,但我在 Firefox 浏览器中得到响应。

http://127.0.0.1:6001/socket.io/?EIO=4&transport=polling&t=NXbeHKa

96:0{"sid":"tmJyofZrnWNMGxIqAALI","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}2:40

并且消息不会发送给订阅的客户

我怎样才能解决这个问题?

4

1 回答 1

1

问题是我的系统上安装了最新版本的“socket.io-client”库

在“package.json”文件中,我更改了这个库的版本:

"socket.io-client": "^4.0.0"

现在是:

"socket.io-client": "^2.4.0"

并且还需要更改“socket.io”

"socket.io": "^2.4.0"

还有一点要记住的是,Laravel 为 Redis 通道创建了一个“laravel_database_”前缀。要订阅它,您需要将此前缀添加到频道名称

window.Echo.channel('laravel_database_chat')
    .listen('Message', ({message}) => {
        this.messages.push(message);
    });

或更改“.env”文件,使其没有前缀。

BROADCAST_DRIVER=redis
...
...
...
REDIS_HOST=127.0.0.1
REDIS_CLIENT=predis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_PREFIX=""

还有一件事,如果你想将 Laravel 队列与 Redis 一起使用,你需要在“.env”文件中写入队列的配置:

QUEUE_CONNECTION=redis
于 2021-03-25T04:36:29.990 回答