【问题标题】:ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE Laravel Echo仅 ERR (P)SUBSCRIBE / (P)UNSUBSCRIBE Laravel Echo
【发布时间】:2020-01-20 06:43:57
【问题描述】:

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

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 laravel redis laravel-echo


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      解决方案: 进入 php.ini 并设置:

      default_socket_timeout = -1
      

      并为 Redis 添加连接

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

      【讨论】:

      • 我也有像下面这样的工匠命令,但没有输出打印输出。你的行吗? public function handle() { Redis::subscribe(['PresenceChannelUpdated'], function ($message, $channel) { $this->info($message); }); }
      • 我有很好的解决方案来通过 laravel PresenceChannelUpdated 检测用户断开连接和连接
      猜你喜欢
      • 2016-12-06
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 2015-08-20
      相关资源
      最近更新 更多