検索

今日、私たちは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 までご連絡ください。
unset()とsession_destroy()の違いは何ですか?unset()とsession_destroy()の違いは何ですか?May 04, 2025 am 12:19 AM

thedifferencebetferencefued fieneunset()andsession_destroy()isthatunset()clearsspecificsessionvariablesはsessionactiveであり、ssession_destroy()ターミナテンテンセッション

負荷分散のコンテキストでの粘着性セッション(セッションアフィニティ)とは何ですか?負荷分散のコンテキストでの粘着性セッション(セッションアフィニティ)とは何ですか?May 04, 2025 am 12:16 AM

StickysionsionsureuserRequestsoredtotheSameserverforsessiondataconsistency.1)Sessionidedificationisionidificationsisignivisionsignsignsuserstoserversusing okiesorurlmodifications.2)CondingRoutingDirectSSubSubSubsEntRequestStotheSameserver.3)LoadBalancingDistributeNewuser

PHPで利用可能なさまざまなセッション保存ハンドラーは何ですか?PHPで利用可能なさまざまなセッション保存ハンドラーは何ですか?May 04, 2025 am 12:14 AM

phpoffersvarioussionsionsavehandlers:1)ファイル:デフォルト、simplebutmaybottleneckonhigh-trafficsites.2)memcached:high-performance、yealforspeed-criticalapplications.3)redis:similartomcached、witordededpersistence.4)データベースの提供

PHPでのセッションとは何ですか?なぜそれらが使用されているのですか?PHPでのセッションとは何ですか?なぜそれらが使用されているのですか?May 04, 2025 am 12:12 AM

PHPでのセッションは、サーバー側のユーザーデータを保存して、複数のリクエスト間で状態を維持するメカニズムです。具体的には、1)セッションはsession_start()関数によって開始され、データは保存され、$ _Sessionスーパーグローバルアレイを読みます。 2)セッションデータはデフォルトでサーバーの一時ファイルに保存されますが、データベースまたはメモリストレージを介して最適化できます。 3)セッションを使用して、ユーザーのログインステータス追跡とショッピングカート管理機能を実現できます。 4)セッションの安全な送信とパフォーマンスの最適化に注意を払い、アプリケーションのセキュリティと効率を確保します。

PHPセッションのライフサイクルを説明してください。PHPセッションのライフサイクルを説明してください。May 04, 2025 am 12:04 AM

phpssionsStartWithsession_start()、figenateAuniqueidandcreateSaServerfile; theySistacrossRequestsandcanbemanbemanBeithsession_destroy()

絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?May 03, 2025 am 12:21 AM

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

セッションがサーバーで機能していない場合、どのような措置を講じますか?セッションがサーバーで機能していない場合、どのような措置を講じますか?May 03, 2025 am 12:19 AM

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()関数の重要性は何ですか?session_start()関数の重要性は何ですか?May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。