Laravel Event Broadcast不适用于推杆

时间:2016-06-16 08:37:10

标签: laravel events pusher broadcasting

我使用推杆进行我的项目。我根据laravel docs配置广播。当我解雇我的事件时,推动器对我不起作用。但是当我从推送器控制台发送数据时,推送器会收到这些数据。 我也尝试vinkla / pusher。它的工作很好但是laravel事件广播不起作用。 请帮我。

这是我的TestEvent.php代码

namespace Factum\Events;

use Factum\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class TestEvent implements ShouldBroadcast
{
    use SerializesModels;

    public $text;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($text)
    {
        $this->text = $text;
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return ['test-channel'];
    }
}

2 个答案:

答案 0 :(得分:5)

我遇到了类似的问题,一步一步地解决了问题。 我假设您正在运行Laravel 5.3。 以下是可能有用的分步演练:

1)检查配置文件:在config \ broadcasting.php中:

'connections' => [

   pusher' => [
     'driver' => 'pusher',
     'key' => env('PUSHER_KEY'),
     'secret' => env('PUSHER_SECRET'),
     'app_id' => env('PUSHER_ID'),
     'options' => [
                         'cluster' => 'eu',
                         'encrypted' => true,
                      // 'host' => 'api-eu.pusher.com'
                      // 'debug' => true,
                  ],
    ],
]

2)在你的" web.php"中创建一个测试路线。档案

Route::get('/broadcast', function() {

        event(new \Factum\Events\TestEvent('Sent from my Laravel application'));

        return 'ok';
});

3)在你的" TestEvent.php"事件文件,您应该添加此方法以指定您的事件名称:

/**
 * The event's broadcast name.
 *
 * @return string
 */
public function broadcastAs()
{
    return 'my_event';
}

4)打开Pusher dashboard并转到调试控制台。 保持页面打开,以便您可以注意到您的申请是否有成功的请求。

5)启动或重新启动队列工作程序。这一步可以决定一切。如果您使用Mysql表作为队列,我将假设您已经设置了"作业"和" failed_jobs"队列所需的数据库表。 另一个重要元素是worker - 队列处理器。 如果没有活动工作程序运行来处理您的队列,作业(TestEvent)将保持"保持"在jobs表中,意味着作业处于挂起状态,并且在活动工作程序开始处理队列之前不会发生任何事情。

你可以像这样启动工人:

www@yourmachine# PHP artisan queue:work --tries=3

6)现在你已经掌握了一切,以便在" http://your-app.laravel/broadcast"并检查您的推送器调试控制台是否有响应。

可选步骤: 如果仍然缺少某些内容,您可以调试与Pusher的应用程序交互,如下所示: 在您的测试路线中尝试这样做:

路由:: get(' / broadcast',function(){

// New Pusher instance with our config data
$pusher = new \Pusher(config('broadcasting.connections.pusher.key'), config('broadcasting.connections.pusher.secret'), config('broadcasting.connections.pusher.app_id'), config('broadcasting.connections.pusher.options'));

// Enable pusher logging - I used an anonymous class and the Monolog
$pusher->set_logger(new class {
                public function log($msg)
                {
                    \Log::info($msg);
                }
            });

// Your data that you would like to send to Pusher
$data = ['text' => 'hello world from Laravel 5.3'];

// Sending the data to channel: "test_channel" with "my_event" event
$pusher->trigger( 'test_channel', 'my_event', $data);

return 'ok'; 

});

我希望它也适合你! 玩得开心! ;)

答案 1 :(得分:0)

1 /你应该清除缓存

php artisan config:cache

php artisan config:clear

php artisan route:cache

php artisan route:clear

php artisan optimize --force

2 /并试试这个来推送消息

2.1 / include:use Pusher\Laravel\Facades\Pusher;

2.2 /在路线内添加:

Pusher::trigger('adevChannel', 'EventAdev', ['message' => $message]);

   event(EventAdev($message) );