Laravel Broadcastingの仕組み

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-03-05 09:27:14134ブラウズ

今日、私たちはLaravel Webフレームワークで放送の概念を探求します。サーバー側で何かが発生したときに、クライアント側に通知を送信できます。この記事では、サードパーティのプッシャーライブラリを使用してクライアント側に通知を送信します。

ララベルのサーバーで何かが発生したときにサーバーからクライアントに通知を送信したい場合は、

たとえば、たとえば、ユーザーがメッセージを送信したことを想定しています。これで、ユーザーAがユーザーBにメッセージを送信すると、ユーザーBにリアルタイムで通知します。新しいメッセージについてユーザーBに通知するポップアップまたはアラートボックスを表示できます!

これは、Laravelでのブロードキャストの概念を順を追って説明するのに最適なユースケースです。これがこの記事で実装されていることです。実際の実装に深く潜る前に、ソケットの基本的なフローを理解しましょう。

まず、Webソケットプロトコルをサポートし、クライアントがWebソケット接続を確立できるサーバーが必要です。この記事では後者をお勧めします。
  • クライアントは、WebソケットサーバーへのWebソケット接続を開始し、接続が成功したときに一意の識別子を受信します。
  • 接続が成功したら、クライアントはイベントを受信したい特定のチャネルに購読します。サーバー側、特定のイベントが発生した場合、チャンネル名とイベント名を提供することにより、Web-Socketサーバーに通知します。
  • 。この記事を移動するときにそれを手に入れることができます。
  • ブロードキャスト構成ファイル
  • 次に、
  • config/broadcasting.php
  • のデフォルトのブロードキャスト構成ファイルを見てみましょう。 log
  • アダプター。もちろん、Pusher
  • Adapterをデフォルトのブロードキャストドライバーとして使用している場合は、

ご覧のとおり、デフォルトのブロードキャストドライバーをメッセージ

テーブルに変更しました。移行ファイルを変更してみましょう
<?php<br><br>return [<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Default Broadcaster<br>    |--------------------------------------------------------------------------<br>    |<br>    | This option controls the default broadcaster that will be used by the<br>    | framework when an event needs to be broadcast. You may set this to<br>    | any of the connections defined in the "connections" array below.<br>    |<br>    | Supported: "pusher", "redis", "log", "null"<br>    |<br>    */<br><br>    'default' => env('BROADCAST_DRIVER', 'null'),<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Broadcast Connections<br>    |--------------------------------------------------------------------------<br>    |<br>    | Here you may define all of the broadcast connections that will be used<br>    | to broadcast events to other systems or over websockets. Samples of<br>    | each available type of connection are provided inside this array.<br>    |<br>    */<br><br>    'connections' => [<br><br>        'pusher' => [<br>            'driver' => 'pusher',<br>            'key' => env('PUSHER_APP_KEY'),<br>            'secret' => env('PUSHER_APP_SECRET'),<br>            'app_id' => env('PUSHER_APP_ID'),<br>            'options' => [<br>                'cluster' => env('PUSHER_APP_CLUSTER'),<br>                'useTLS' => true,<br>            ],<br>        ],<br><br>        'redis' => [<br>            'driver' => 'redis',<br>            'connection' => 'default',<br>        ],<br><br>        'log' => [<br>            'driver' => 'log',<br>        ],<br><br>        'null' => [<br>            'driver' => 'null',<br>        ],<br><br>    ],<br><br>];<br>

イベントクラスを作成

Laravelでカスタムイベントを提起するたびに、そのイベントのクラスを作成する必要があります。イベントの種類に基づいて、Laravelはそれに応じて反応し、必要なアクションを実行します。

イベントが通常のイベントである場合、Laravelは関連するリスナークラスを呼び出します。一方、イベントがブロードキャストタイプの場合、Laravelはそのイベントをconfig/broadcasting.phpファイルで構成されているWebソケットサーバーに送信します。その他の必要なプッシャー関連の情報。

さらに移動すると、 private> private

メソッドのエコーを使用して、プライベートチャンネル user。{user_id}<p>を購読します。前に説明したように、クライアントはプライベートチャネルに購読する前に自分自身を認証する必要があります。したがって、<code> echo <suly>オブジェクトは、必要なパラメーターを使用してバックグラウンドでXHRを送信することにより、必要な認証を実行します。最後に、laravelは<code> user。{user_id}ルートを見つけようとします。

routes/channels.php ファイルで定義したルートと一致するはずです。これからは、このチャンネルですべての着信イベントを受け取ることができます。privateuser.{USER_ID}私たちの場合、 newMessagEnotification<code>Echoイベントを聞きたいので、 echo <code>user.{USER_ID}オブジェクトの listen <code>メソッドを使用して実現しました。物事をシンプルに保つために、Pusherサーバーから受け取ったメッセージに警告するだけです。<strong> </strong>Web-Socketsサーバーからイベントを受信するためのセットアップでした。次に、ブロードキャストイベントを発生させるコントローラーファイルの<code>送信メソッドを実行します。<p><code>メソッドを送信するコードをすばやくプルしましょう。そのため、<code> send<code>user.{USER_ID}メソッドを送信するのその動作を模倣しようとしました。 <code> newMessagEnotification <sullsed of> should broadcastnow</sullsed>

タイプのため、laravelは

config/broadcasting.phpNewMessageNotificationファイルからデフォルトのブロードキャスト構成をロードします。最後に、 newMessagEnotification <code>listenイベントをユーザーで構成されたWeb-socketサーバーにブロードキャストします。{user_id}<code>Echoチャンネル。

私たちの場合、イベントはuser.{USER_ID}チャンネルのプッシャーWebソケットサーバーにブロードキャストされます。受信者ユーザーのIDが1の場合、イベントはuser.1チャンネルで放送されます。

前述のように、このイベントのイベントを耳にするセットアップがすでにあるため、ユーザーにアラートボックスが表示されるはずです!これまでに構築したこと。まだログインしていない場合は、ログイン画面にリダイレクトされます。ログインしたら、以前に定義した放送ビューを見る必要があります。

実際には、Laravelはすでにあなたのためにかなりの仕事をしています。 Pusherクライアントライブラリが提供する

設定を有効にしたため、デバッグ目的でブラウザコンソールのすべてをログに記録します。 http:// your-laravel-site-domain/message/indexページにアクセスすると、コンソールにログインしているものを見てみましょう。もちろん、ログインしているユーザーのIDに基づいて、ケースに別のチャネル名を作成できます。次に、このページを開いたままにしておきます

メソッドをテストします。

次に、http:// your-laravel-site-domain/message/send urlを他のタブまたは別のブラウザーで開いてみましょう。別のブラウザを使用する場合は、そのページにアクセスできるようにログインする必要があります。

Pusher.logToConsole

<?php<br><br>return [<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Default Broadcaster<br>    |--------------------------------------------------------------------------<br>    |<br>    | This option controls the default broadcaster that will be used by the<br>    | framework when an event needs to be broadcast. You may set this to<br>    | any of the connections defined in the "connections" array below.<br>    |<br>    | Supported: "pusher", "redis", "log", "null"<br>    |<br>    */<br><br>    'default' => env('BROADCAST_DRIVER', 'null'),<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Broadcast Connections<br>    |--------------------------------------------------------------------------<br>    |<br>    | Here you may define all of the broadcast connections that will be used<br>    | to broadcast events to other systems or over websockets. Samples of<br>    | each available type of connection are provided inside this array.<br>    |<br>    */<br><br>    'connections' => [<br><br>        'pusher' => [<br>            'driver' => 'pusher',<br>            'key' => env('PUSHER_APP_KEY'),<br>            'secret' => env('PUSHER_APP_SECRET'),<br>            'app_id' => env('PUSHER_APP_ID'),<br>            'options' => [<br>                'cluster' => env('PUSHER_APP_CLUSTER'),<br>                'useTLS' => true,<br>            ],<br>        ],<br><br>        'redis' => [<br>            'driver' => 'redis',<br>            'connection' => 'default',<br>        ],<br><br>        'log' => [<br>            'driver' => 'log',<br>        ],<br><br>        'null' => [<br>            'driver' => 'null',<br>        ],<br><br>    ],<br><br>];<br>

sendチャンネルのプッシャー・ウェブソケットサーバーから

イベントを受け取ったことがわかります。プッシャーアカウントに移動し、アプリケーションに移動します。

debug

Console の下で、メッセージが記録されているのを見ることができるはずです。うまくいけば、私は自分の知る限り物事を単純化しようとしたので、それは一回の進行であまり多くありませんでした。

結論

今日、私たちはLaravelの最も議論されていない機能の1つであるBroadcastingを経験しました。これにより、Webソケットを使用してリアルタイム通知を送信できます。この記事の過程で、前述の概念を実証する実世界の例を作成しました。

以上がLaravel Broadcastingの仕組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。