我正在为一个应用开发聊天/留言功能.当用户发送消息时,我希望触发并广播特定事件.然后,我希望Laravel Echo使用pusher驱动程序,通过Laravel Echo在活动的广播频道上收听活动.

我希望Laravel Echo实现位于Vue组件中,并检索通过事件广播的数据.目前,我无法通过私有频道或仅通过某个频道播放活动.

以下是我所做的:

1) 将配置添加到.env.

2) 将配置添加到bootstrap.js:

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: 'mykey',
  encypted: false
});

3) 添加了身份验证签入App\Providers\BroadcastServiceProvider(如果用户现在已登录,则仅返回true):

Broadcast::channel('chat', function ($user) {
  // verify that user is recipient of message
  return \Auth::check();
});

4) 从App\Providers\BroadcastServiceProvider::class,增加到App/config/app.php.

5) 创建了事件App\Events\UserSentMessage,它在名为chatPrivateChannel上广播.我还试着向Channel频道广播.我判断了一下,这个事件是从一个控制器中的event()助手的呼叫中触发的,它似乎没有被广播.我也try 过在上面提到的控制器中使用broadcast方法.

6) 在有效的Vue组件中的mounted Vue生命周期挂钩中添加了以下内容(组件按预期呈现数据等,只是不使用Laravel Echo atm):

    Echo.private('chat').listen('UserSentMessage', (data) => {
                console.log(data);
            }, (e) => {
                console.log(e);
            });

他们也try 过:

     Echo.channel('chat').listen('UserSentMessage', (data) => {
                console.log(data);
            }, (e) => {
                console.log(e);
            });

Vue组件正在成功订阅指定的频道.pusher调试控制台识别出它正在被订阅,但触发的事件永远不会被广播.

似乎广播这件事有问题.我也try 过使用broadcast()助手,而不是event()助手.

此外,当通过Echo.private()通过Laravel Echo订阅活动时.它似乎以private作为频道名称的前缀,所以我也try 了(在事件中)向一个名为private-chat的频道广播.

推荐答案

I can recommend You to check Your .env file
and make sure BROADCAST_DRIVER is not log (try pusher)
and also don't forget to keep running queue listener:

php artisan queue:listen

UPD.:如果你想寻找更高级的解决方案,请阅读laravel horizon篇文章

Vue.js相关问答推荐

可组合数据获取示例

Vue.js 3 没有组件的实例?

Vue 2 如何在全局函数中返回观察者

Vue composition api: 访问