仅错误 (P)SUBSCRIBE / (P)UNSUBSCRIBE Laravel Echo

ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE Laravel Echo

美好的一天! 我使用 PrecenseChannel 并使用对 Redis 频道的订阅在服务器端捕获加入/离开 我使用 artisan 命令:

public function handle()
{
    $this->info("Presence channel watcher was started!");
    Redis::subscribe(['PresenceChannelUpdated'] , function ($message, $channel) {
        //Code for comparing users who leave and who join
        Notification::send($a1->users, new ExampleNotification($a2, $data));
    }
}

我使用发送事件通知(仅广播) 但是发送通知后,我在控制台中收到错误消息:

ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this contex

没有通知,一切正常,通知本身有效并发送广播

由于我在服务中使用了这些通知,因此,通知有效

有什么帮助吗?谢谢

解决方法: 转到 php.ini 并设置:

default_socket_timeout = -1

并为 Redis 添加连接

Redis::connection('subscriber')->subscribe(['PresenceChannelUpdated'], callback)

一旦 Redis 连接订阅了 pubsub 频道,它就变成了 pubsub 类型的连接,只允许 (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT 命令。

看起来您正在尝试对其他命令(可能是 R/W 数据)使用相同的连接,这会产生这个确切的错误。解决方案是有两个连接对象,一个订阅者和一个处理所有其他 Redis 命令。