Laravel广播无法向Pusher发送事件

6
我已经配置了 Laravel 使用 pusher 来发送 Laravel Echo 事件,但是我从 artisan console 发送的事件无法到达 pusher。我从 pusher debug console 发送的事件正常工作,因此前端部分没有问题。难道 vagrant VM 会对此产生干扰?
我的 .env 文件:
QUEUE_DRIVER=sync
...
PUSHER_KEY=<key>
PUSHER_SECRET=<secret>
PUSHER_APP_ID=<app_id>

我的broadcasting.php

'default' => env('BROADCAST_DRIVER', 'pusher'),
...
'connections' => [

    'pusher' => [
        'driver'  => 'pusher',
        'key'     => env('PUSHER_KEY'),
        'secret'  => env('PUSHER_SECRET'),
        'app_id'  => env('PUSHER_APP_ID'),
        'options' => [
            'cluster'   => 'eu',
            'encrypted' => true
        ],
    ],
    ...
]

事件:

class NewMessage implements ShouldBroadcast
{
    public function broadcastOn()
    {
         return [new Channel('chat.'.$this->conversation->id)];
    }
}

该事件由观察者类观察模型的created事件而触发。

public function created(Chat\Message $message)
{
    event(new NewMessage($message));
}

观察者模式在 AppServiceProvider 中进行注册。
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Message::observe(MessageObserver::class);
    }
}

当我运行控制台命令以创建新消息时,终端会显示以下内容:
php artisan chat:broadcast asdasd
[2016-12-15 16:26:44] local.INFO: Broadcasting [eventname] on channels [channel] with payload: {...}  

注意:大多数名称都是机密的,因此我使用了像eventname、channel等占位符,但我希望相关信息都在其中。
谢谢!

1
我在Laravel 5.1中遇到了同样的问题。有趣的是,它曾经是可以工作的,但突然就停止了。我还没有找出原因。我可以告诉你,不是vagrant虚拟机的干扰...我们已经在虚拟机上运行成功了。 - geoidesic
2个回答

9
请确保.env文件中的BROADCAST_DRIVER设置为pusher,如下所示。
BROADCAST_DRIVER=pusher

broadcasting.php 文件中,修改 potions 数组如下代码

'pusher' => [
    'driver'  => 'pusher',
    'key'     => env('PUSHER_KEY'),
    'secret'  => env('PUSHER_SECRET'),
    'app_id'  => env('PUSHER_APP_ID'),
    'options' => [
      //leave these empty in your code
    ],
],`

保存这些更改并运行您的Laravel服务器,我希望这对您有用...!!

似乎你可以帮我。看看这个:https://stackoverflow.com/questions/45877837/how-can-i-make-realtime-notification-for-user-who-are-not-login - moses toh

3

在广播任何事件之前,您需要首先注册 App\Providers\BroadcastServiceProvider。在新的 Laravel 应用程序中,您只需要取消注释 config/app.php 配置文件中 providers 数组中的此提供程序即可。

     /*
     * Application Service Providers...
     */
    App\Providers\AppServiceProvider::class,
    App\Providers\AuthServiceProvider::class,
    //App\Providers\BroadcastServiceProvider::class,
    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,

.env文件

BROADCAST_DRIVER=pusher

PUSHER_APP_ID=app_id
PUSHER_APP_KEY=auth-key
PUSHER_APP_SECRET=secret
PUSHER_APP_CLUSTER=cluster

你可以在控制器中像这样触发事件。
broadcast(new NewMessage($message));

您可以运行 php artisan config:cache 以确保配置生效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接