10

アプリのチャット/メッセージ機能に取り組んでいます。ユーザーがメッセージを送信すると、特定のイベントがトリガーされてブロードキャストされるようにします。pusher次に、ドライバーを使用して、Laravel Echo がイベントのブロードキャスト チャンネルで Laravel Echo を介してイベントをリッスンするようにします。

Laravel Echo の実装を Vue コンポーネントに入れ、イベントを介してブロードキャストされたデータを取得したいと考えています。現在、イベントをプライベート チャネルまたはチャネルのみにブロードキャストすることはできません。

これが私がやったことです:

1) に構成を追加しました.env

2) に設定を追加bootstrap.js:

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

3)認証チェックインを追加しましたApp\Providers\BroadcastServiceProvider(ユーザーが今のところサインインしている場合はtrueを返すだけです):

Broadcast::channel('chat', function ($user) {
  // verify that user is recipient of message
  return \Auth::check();
});

App\Providers\BroadcastServiceProvider::class,4)に追加App/config/app.php

5)名前付きApp\Events\UserSentMessageでブロードキャストする Event を作成しました。また、にブロードキャストしようとしました。確認したところ、コントローラーのヘルパーへの呼び出しからイベントが発生していますが、ブロードキャストされていないようです。上記のコントローラーでメソッドを使用してみました。PrivateChannelchatChannelevent()broadcast

6) 有効な Vue コンポーネントの Vue ライフサイクル フック内に以下を追加しましたmounted(コンポーネントは期待どおりにデータなどをレンダリングしていますが、Laravel Echo atm では機能しません)。

    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

5 に答える 5

30

あなたの.envファイルをチェックして、そうでないことを
確認することをお勧めします(試してください)。また、キューリスナーを実行し続けることを忘れないでください:BROADCAST_DRIVERlogpusher

php artisan queue:listen

UPD .: より高度なソリューションをお探しの場合は、laravel Horizo​​nについてお読みください。

于 2016-12-21T04:25:20.800 に答える