Laravel Event Broadcast не работает с pusher

Я использовал pusher для своего проекта. Я настраиваю трансляцию в соответствии с документами laravel. Когда я выстрелил, у меня не работает толкатель событий. Но когда я отправляю данные с консоли толкателя, толкатель получает эти данные. Еще пробую винкла / пушер. Он работает нормально, но трансляция событий 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'];
    }
}

person Nahid Bin Azhar    schedule 16.06.2016    source источник


Ответы (2)


Я столкнулся с подобной проблемой и пошагово исправил ее. Я предполагаю, что вы используете Laravel 5.3. Вот пошаговое руководство, которое может быть полезно:

  1. Проверьте свой файл конфигурации. В 1_:

    '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 и перейдите в консоль отладки. Держите страницу открытой, чтобы вы могли заметить, если вы получили успешный запрос от вашего приложения.

  1. Запустите или перезапустите обработчика очереди. Этот шаг может сделать все или сломать все. Если вы используете таблицы Mysql для очередей, я предполагаю, что вы уже настроили свои задания и таблицы базы данных failed_jobs, необходимые для очередей. Еще один важный элемент - рабочий - обработчик очереди. Без активного рабочего, работающего для обработки вашей очереди, задания (TestEvent) останутся в таблице заданий, что означает, что задания ожидают выполнения, и больше ничего не произойдет, пока активный рабочий не начнет обрабатывать очередь.

    Запустить воркер можно так:

    www@yourmachine# PHP artisan queue:work --tries=3
    
  2. Теперь, когда у вас есть все, чтобы позвонить на http: //your-app.laravel/broadcast и проверить консоль отладки pusher на предмет ответа.

Необязательный шаг: если что-то все еще отсутствует, вы можете отладить взаимодействие вашего приложения с Pusher следующим образом: В своем тестовом маршруте попробуйте сделать следующее:

Route::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'; 
});

Надеюсь, это сработает и для вас! Удачи кодированию! ;)

person A. Fülöp    schedule 25.10.2016

1 / вы должны очистить кеш

php artisan config:cache

php artisan config:clear

php artisan route:cache

php artisan route:clear

php artisan optimize --force

2 / и попробуйте это для push-сообщения

2.1 / включают: use Pusher\Laravel\Facades\Pusher;

2.2 / внутри маршрута добавить:

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

or

   event(EventAdev($message) );
person Abdelhadi Abdo    schedule 13.05.2018
comment
Часть оптимизации php artisan полезна - person Wailan Tirajoh; 19.04.2021