Как устранить неполадки Laravel Broadcasts + Pusher ..? - PullRequest
0 голосов
/ 13 октября 2018

Я следую Документации Laravel , чтобы настроить вещание с использованием Pusher, и это выглядит довольно просто, но я еще не получил его работу, поэтому я, должно быть, где-то ошибсяпуть.

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

Сторона сервера

Я создал Event, который реализует ShouldBroadcastNowинтерфейс и определил метод broadcastsOn().

class ThreadMessageCreated implements ShouldBroadcastNow {
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function broadcastOn() {
        return new Channel('bobtest');
    }

Я поднимаю Событие с одного из моих контроллеров API:

public function createMessage(Thread $thread, Request $request) {
    ...
    event(new ThreadMessageCreated($message, $thread));
    return $message;
}

Я настроил свои учетные данные в моем *Файл 1020 *.

на стороне клиента

Я настроил эхо Laravel на стороне клиента (с помощью пакета angular-laravel-echo )и подписал моего клиента на канал.

ngOnInit() {
    this.echo
        .join('bobtest', 'public')
        .listen('bobtest', 'ThreadMessageCreated')
        .subscribe(()=>alert('message received'));
    console.log(this.echo);
}

Однако, когда моя конечная точка API ударила, событие запускается, но я ничего не вижу на стороне клиента.

ТакЯ добавил логирование в методе broadcastOn (), чтобы убедиться, что он вызывается.Затем я изменил драйвер с pusher на log и вижу, что информация о трансляции записывается в файл laravel.log.

Итак, я предполагаю , что трансляциятакже происходит при использовании драйвера Pusher, и либо не отправляется из Laravel, либо не принимается клиентом.

Я новичок в сокетах, pusher и Laravel Echo, поэтомуЯ не уверен, где искать дополнительную информацию, чтобы отследить это.

  • Я не вижу никаких ошибок в файле laravel.log.
  • Я не вижувсе ошибки в Chrome Dev Tools на стороне клиента.
  • Я вошел в систему pusher, и на вкладке «Журналы ошибок» нет ошибок

Что можно сделать дляполучить более подробную информацию, чтобы выяснить, где происходит проблема?

Спасибо!: -)

[ОБНОВЛЕНИЕ] Я вижу, что трансляции появляются в моей учетной записи-отправителе, поэтому проблема, похоже, на стороне клиента.Возможно я не правильно подписываюсь на нужный канал?

Кроме того, я использую Laravel только в качестве серверной части, используя аутентификацию JWT.В настоящее время я не использую токен laravel csrf, не уверен, что это может иметь отношение к делу.

1 Ответ

0 голосов
/ 16 октября 2018

Теперь я узнал, что могу видеть данные веб-сокетов в Dev Tools.Я предполагаю, что эта ошибка была там раньше, я просто не заметил этого.Я думаю, код состояния 101 не выделялся мне: -o

Но, посмотрев в Dev Tools, я ясно увидел эту ошибку:

{
    message: "App key xxx not in this cluster. Did you forget to specify the cluster?",
    event: "pusher:error"
}

Для просмотра активности Web Socket:

Инструменты разработчика> Сеть> Фильтр> WS (веб-сокеты):

Web Sockets in Chrome Dev Tools

В моем случае мне просто нужно было указатькластер в конфигурации Laravel Echo:

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'xxxxxxxxxxxxxxxxxxxx',
    cluster: 'us2',  <--------------[pusher needs a cluster :-)]
    host: 'http://the-host.com',
    auth: {
        headers: {
            'Authorization': 'Bearer ' + token
        }
    }
});
...