2016-12-19 2 views
4

Я работаю над функцией чата/сообщения для приложения. Когда Пользователь отправляет сообщение, я хочу, чтобы определенное событие было инициировано и транслировалось. Затем я хочу, чтобы Laravel Echo прослушивал широковещательный канал мероприятия на мероприятие через Laravel Echo, используя драйвер pusher.Событие Laravel не является широковещательным

Я хочу, чтобы реализация Laravel Echo была в компоненте Vue и извлекала данные, которые транслировались через событие. В настоящее время я не могу получить событие для трансляции на личный канал или только на канал.

Вот что я сделал:

1) Добавлен конфиг в .env.

2) Добавлен конфиг в bootstrap.js:

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

3) Добавлен AUTH проверка в App\Providers\BroadcastServiceProvider (просто возвращает истину, если пользователь подписывается в настоящее время):

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, которое вещает на PrivateChannel с именем chat. Я также пытался транслировать до Channel. Я проверил, и событие запускается из вызова помощника event() в контроллере, он просто не транслируется. Я также попытался использовать метод broadcast в упомянутом контроллере.

6) Добавлены следующие в Вью крюком жизненного цикла mounted в действительный компонент Вью (компонент представления данных и т.д., как и ожидалось, просто не работает с Laravel Echo атм):

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

также пытались:

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

Компонент Vue успешно подписывается на указанный канал. Пульт отладки толкателя признал, что он подписывается, но событие, когда оно срабатывает, никогда не транслируется.

Похоже, что существует проблема с трансляцией события. Я также попытался использовать вспомогательный помощник broadcast(), а не помощник event().

Также, подписка на мероприятие с использованием Laravel Echo через Echo.private(). Кажется, он префикс имени канала private, поэтому я также пробовал трансляцию (в случае) на канал с именем private-chat.

ответ

4

Я могу только рекомендовать Вам проверить Ваш .env файл
и убедитесь, что BROADCAST_DRIVER не log (попробуйте pusher)
, а также не забудьте продолжать работать очереди Слушатель:

php artisan queue:listen 
+1

Отлично! Большое спасибо! – AshMenhennett

1

событие не будет будет передаваться немедленно, он будет отправлен в очередь, только когда вы будете слушать или работать в очереди, событие будет потреблено. Если вы хотите немедленно выполнить задания, установите QUEUE_DRIVER = sync.см.: laravel queue

Смежные вопросы