laravel 事件应该广播不起作用

Posted

技术标签:

【中文标题】laravel 事件应该广播不起作用【英文标题】:laravel Event shouldbroadcast not working 【发布时间】: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() 来处理它, 但大多数教程都没有这样做。

我还需要检查什么?

【问题讨论】:

【参考方案1】:

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

我跑完之后

php artisan queue:listen

客户端收到消息!

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

【讨论】:

我猜是laravel版本的问题,我现在是5.6。 我现在才遇到这个问题,我用的是最新版本的 Laravel 7。我只能用ShouldBroadcastNow 解决这个问题。我在生产服务器上使用 dokku。 ShouldBroadcast 在本地一切正常

以上是关于laravel 事件应该广播不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 审核更新事件不起作用

Laravel 回显服务器在生产服务器中不起作用

Laravel Migrations onDelete Restrict 不起作用

Ajax 检索错误不起作用 Laravel

iOS 广播扩展(屏幕广播)不起作用

socket.io:为啥这个广播语句不起作用?