2016-12-19 5 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)ユーザーは、今のところで署名されている場合(ただ)trueを返す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) chatという名前でブロードキャストするイベントApp\Events\UserSentMessageを作成しました。私もChannelにブロードキャストしようとしました。私はチェックし、コントローラ内のevent()ヘルパーへのコールからイベントが発せられていますが、ブロードキャストされていないようです。私はまた、コントローラのbroadcastを使用してみました。

6)は予想通り(成分)だけLaravelエコー気圧で作業していない、データなどのレンダリングされた有効なVueのコンポーネントでmounted Vueのライフサイクルフック内で次のを追加しました:

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コンポーネントは、指定されたチャネルに正常にサブスクライブしています。プッシャー・デバッグ・コンソールは、それがサブスクライブされていることを認識しましたが、トリガーされたイベントは決してブロードキャストされません。

イベントのブロードキャストに問題があるようです。私もevent()ヘルパーではなく、broadcast()ヘルパーを使ってみました。

また、Laravel Echoでイベントに登録するときは、Echo.private()。チャンネル名の先頭にprivateと表示されているようですので、(イベントで)private-chatという名前のチャンネルへのブロードキャストも試みました。

私だけ
pusherを試してみてください)あなたの .envファイル
をチェックして、 BROADCAST_DRIVERlogではないことを確認するためにあなたをお勧めすることができますし、また、キューリスナーを実行し続けることを忘れないでください

答えて

4

php artisan queue:listen 
+1

パーフェクト!どうもありがとうございました! – AshMenhennett

1

イベントをしませんすぐにブロードキャストされると、キューに送信されます。キューを聴いたり、キューで作業する場合にのみ、イベントが消費されます。すぐにジョブを実行する場合は、QUEUE_DRIVER = syncを設定します。参照:laravel queue