【问题标题】:laravel Event shouldbroadcast not workinglaravel 事件应该广播不起作用
【发布时间】:2018-12-19 00:02:25
【问题描述】:

我正在尝试制作一个实时 socket.io 应用程序。

redis 连接很好,因为我可以在 tinker 中做到这一点,而且效果很好。

Redis::publish('test-channel','test-message');

但我想用事件来发布消息

应用\事件\ChatMessage.php:

    namespace App\Events;

    use Illuminate\Broadcasting\Channel;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Broadcasting\PrivateChannel;
    use Illuminate\Broadcasting\PresenceChannel;
    use Illuminate\Foundation\Events\Dispatchable;
    use Illuminate\Broadcasting\InteractsWithSockets;
    use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

    class ChatMessage implements ShouldBroadcast
    {
        use Dispatchable, InteractsWithSockets, SerializesModels;

        public $name;
        public $message;

        public function __construct($name,$message)
        {

          $this->name = $name;
          $this->message = $message;
        }

        public function broadcastOn()
        {

          return ['test-channel'];
          // return new Channel('test-channel');
        }
    }

在公共函数broadcastOn

我试过了

           return ['test-channel'];
           return 'test-channel';
           return new Channel('test-channel');

一切都不起作用。

我在修补程序中这样做

event(new App\Events\ChatMessage('bear','banana'));

而 laravel 只是返回 []

我知道我可以使用监听器通过 Redis::publish() 来处理它, 但大多数教程都没有这样做。

我还需要检查什么?

【问题讨论】:

    标签: laravel events redis broadcast


    【解决方案1】:

    我发现即使我触发了事件,消息也会排队。

    我跑完之后

    php artisan queue:listen
    

    客户端收到消息!

    所以我通过将 ShouldBroadcast 更改为 ShouldBroadcastNow 来解决它,它可以工作!

    【讨论】:

    • 我猜是laravel版本的问题,我现在是5.6。
    • 我现在才遇到这个问题,我用的是最新版本的 Laravel 7。我只能用ShouldBroadcastNow 解决这个问题。我在生产服务器上使用 dokku。 ShouldBroadcast 在本地一切正常
    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 2018-03-09
    • 2017-01-20
    • 2016-06-12
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多