放送システム
- ブロードキャスト サービス プロバイダー
- ##CSRF トークン
- ドライバーの要件
- Socket.IO ##キューの要件
- #概念の概要
- サンプル プログラムの使用
- ShouldBroadcast インターフェイス
- イベント ブロードキャストを聞く
- ブロードキャスト条件
- 認可チャネル
- 認可ルートの定義
- カスタム認可エンドポイント
- 認可コールバックの定義
- 認可コールバック モデル バインディング
- チャネル クラスの定義
- ブロードキャスト イベント
- ブロードキャストの受信
- #プレゼンス チャネルの承認
放送システム
- 概要
- 概念の概要
- ## 定義ブロードキャストイベント
- 認可チャネルブロードキャスト イベント
- ##他の人へのブロードキャストのみ
- #Laravel Echoのインストール
- #プレゼンス チャネルに参加
- ブロードキャストプレゼンス チャネル
- クライアント イベント
- ##メッセージ通知
- はじめに
- 最新の Web アプリケーションでは、WebSocket を使用して、リアルタイムで即座に更新されるユーザー インターフェイスを実装します。サーバー上のデータが更新されると、WebSocket接続を通じて更新情報がクライアントに送信され処理されます。これは、アプリケーションを継続的にポーリングするよりも信頼性が高く効率的なオプションです。 このタイプのアプリケーションの構築を支援するために、Laravel は WebSocket 接続を通じてイベントを簡単に「ブロードキャスト」できるようにします。 Laravel イベントをブロードキャストすると、サーバー側とクライアント側の JavaScript アプリケーション間で同じイベント名を共有できます。
{注意} イベントブロードキャストについて詳しく学ぶ前に、Laravel イベントとリスナーに関するドキュメントをすべて読んでいることを確認してください。
構成
イベント ブロードキャストに関するすべての構成は、
config/broadcasting.php
構成ファイルに保存されます。 Laravel には、Pusher、Redis、およびローカル開発とデバッグ用のlog
ドライバーなど、いくつかのブロードキャスト ドライバーが付属しています。さらに、ブロードキャスト システムを完全にオフにすることができるnull
ドライバーもあります。各ドライバーの設定例は、config/broadcasting.php
設定ファイルにあります。ブロードキャスト サービス プロバイダー
イベントをブロードキャストする前に、まず
App\Providers\BroadcastServiceProvider
を登録する必要があります。新しい Laravel アプリケーションの場合、config/app.php
構成ファイルのproviders
配列内のプロバイダーのコメントを解除するだけで済みます。このプロバイダーを使用すると、ブロードキャスト認証ルートとコールバックを登録できます。CSRF トークン
Laravel Echo 現在のセッションの CSRF トークンへのアクセスが必要です。アプリケーションの
head
HTML 要素で、CSRF トークンを含むmeta
タグが定義されていることを確認する必要があります:<meta name="csrf-token" content="{{ csrf_token() }}">
ドライバーの要件
Pusher
Pusher を使用してイベントをブロードキャストする場合は、Composer パッケージ マネージャーを使用して Pusher をインストールしてくださいPHP SDK:
composer require pusher/pusher-php-server "~3.0"
次に、
を指定することもできます。config/broadcasting.php
構成ファイルでプッシャー証明書を構成する必要があります。このファイルにはプッシャーのサンプル構成がすでに含まれているため、プッシャーのキー、シークレット、およびアプリケーション ID をすぐに指定できます。config/broadcasting.php
ファイル内のpusher
構成項目を使用すると、クラスター:
options'options' => [ 'cluster' => 'eu', 'encrypted' => true ],
# など、Pusher でサポートされる追加の##Laravel Echo で Pusher を使用する場合、resources/assets/js/bootstrap.js
で Echo オブジェクトをインスタンス化するときに、必要に応じて
pusherを指定する必要があります。ファイル ブロードキャスター:
import Echo from "laravel-echo"window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key' });
RedisRedis ブロードキャスターを使用する場合は、Predis ライブラリをインストールしてください:composer require predis/predis
Redis ブロードキャスターは公開に Redis を使用します。 /Subscribe 機能はメッセージをブロードキャストしますが、WebSocket チャネルにメッセージをブロードキャストするには、Redis からメッセージを受信できる WebSocket サーバーとペアリングする必要があります。 Redis ブロードキャスターがイベントを公開すると、イベントは指定されたチャネルに公開され、送信されるデータは JSON でエンコードされた文字列になります。この文字列には、イベント名、data
データ、およびイベント ソケット ID (可能な場合) を生成したユーザーが含まれます。
Socket.IO
Redis ブロードキャスターを Socket.IO サーバーとペアにする場合は、アプリケーションに Socket.IO JavaScript クライアント ライブラリを含める必要があります。 NPM パッケージ マネージャーを介してインストールできます。
npm install --save socket.io-client
次に、Echo をインスタンス化するときに
socket.io
コネクタとhost
を指定する必要があります。import Echo from "laravel-echo"window.io = require('socket.io-client'); window.Echo = new Echo({ broadcaster: 'socket.io', host: window.location.hostname + ':6001' });
最後に、Laravel 互換の Socket.IO サーバーを実行する必要があります。 Laravel には正式に組み込みの Socket.IO サーバー実装はありませんが、現在 GitHub でホストされている、コミュニティ主導で保守されているプロジェクト tlaverdure/laravel-echo-server を選択できます。
キューの要件
イベントのブロードキャストを開始する前に、キュー リスナーを構成して実行する必要もあります。すべてのイベント ブロードキャストはキュー タスクを通じて行われるため、アプリケーションの応答時間は大きな影響を受けません。
#概念の概要Laravel のイベント ブロードキャストを使用すると、ドライバーベースの WebSocket を使用してサーバー側の Laravel イベントをブロードキャストできます。クライアント側の JavaScript アプリケーションに。現在の Laravel には、Pusher と Redis ドライバーが付属しています。 Laravel Echo の Javascript パッケージを使用すると、クライアント側でイベントを簡単に利用できます。
イベントは、パブリックまたはプライベートとして指定できる「チャネル」を通じてブロードキャストされます。訪問者は誰でも承認や認証なしでパブリック チャネルに登録できますが、プライベート チャネルに登録したい場合は、ユーザーが認証され、そのチャネルに対して許可される必要があります。 サンプル プログラムの使用 イベント ブロードキャストの各コンポーネントに入る前に、電子から始めましょう。ビジネス Web サイトの概要を例として取り上げます。Pusher または Laravel Echo の設定の詳細については、このドキュメントの他の章で詳しく説明されているため、説明しません。
私たちのアプリケーションでは、ユーザーが注文の配送ステータスを表示できるページがあると想定しています。出荷ステータスが更新されたときにトリガーされるShippingStatusUpdated
イベントがあります:
event(new ShippingStatusUpdated($update));
ShouldBroadcast
インターフェイスユーザーが注文を表示しているときに、ステータスの更新を確認するためにページを更新する必要はありません。更新があった場合には、クライアントに更新情報を積極的にブロードキャストしたいと考えています。したがって、
ShippingStatusUpdated
イベントをマークして、ShouldBroadcast
インターフェイスを実装する必要があります。これにより、Laravel はイベントの発生時にイベントをブロードキャストします。<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class ShippingStatusUpdated implements ShouldBroadcast{ /** * 有关配送状态更新的信息。 * * @var string */ public $update; }
ShouldBroadcast
このインターフェイスでは、イベントがbroadcastOn
メソッドを定義する必要があります。このメソッドは、イベントがブロードキャストされるチャネルを指定する役割を果たします。 (Artisan コマンドを使用して) 生成されたイベント クラスでは、空のbroadcastOn
メソッドがすでに定義されているため、その詳細を完了するだけで済みます。注文の作成者のみがステータスの更新を確認できるようにしたいため、この注文にバインドされたプライベート チャネルにイベントをブロードキャストする必要があります:/** * 获取事件应该广播的频道。 * * @return array */ public function broadcastOn(){ return new PrivateChannel('order.'.$this->update->order_id); }
Authorization Channel
ユーザーは許可されている場合にのみプライベート チャネルを聞くことができることに注意してください。チャネル認証ルールは
このメソッドは、チャネル名とコールバック関数の 2 つのパラメータを受け取ります。コールバック関数は、routes/channels.php
ファイルで定義できます。この例では、ビューがプライベートorder.1
チャネルをリッスンするすべてのユーザーを認証して、注文の真の作成者のみがリッスンできるようにする必要があります。true
プレースホルダーを使用して、チャネル名の「ID」部分がワイルドカードであることを示します。または
falseを返すことで、ユーザーがチャネルを聞く権限があるかどうかを示します。
すべての認可コールバックは、現在認証されているユーザーを最初のパラメータとして受け取り、追加のワイルドカード パラメータを後続のパラメータとして受け取ります。この例では、
{orderId}
イベント ブロードキャストのリッスン次に残っているのは、JavaScript アプリケーションでイベントをリッスンすることだけです。 Laravel Echo を使用してこれを行うことができます。まず、private
メソッドを使用してプライベート チャネルに登録します。次に、listen
メソッドを使用して、
ShippingStatusUpdatedイベントをリッスンします。デフォルトでは、イベントのすべてのパブリック プロパティがブロードキャスト イベントに含まれます:
Broadcast::channel('order.{orderId}', function ($user, $orderId) { return $user->id === Order::findOrNew($orderId)->user_id; });
ブロードキャスト イベントを定義する
特定のイベントをブロードキャストする必要があることを Laravel に伝えるには、イベント クラスに
Illuminate\Contracts\Broadcasting\ShouldBroadcast
インターフェイスを実装するだけです。このインターフェイスはフレームワークによって生成されたすべてのイベント クラスにインポートされているため、独自のイベントに簡単に追加できます。ShouldBroadcast
インターフェイスでは、メソッドbroadcastOn
を実装する必要があります。このメソッドは、イベントがブロードキャストされるチャネルまたはチャネルの配列を返します。これらのチャネルは、Channel
、PrivateChannel
、またはPresenceChannel
のインスタンスである必要があります。Channel
は、任意のユーザーが購読できるパブリック チャネルを表し、PrivateChannels
およびPresenceChannels
は、チャネル認証を必要とするプライベート チャネルを表します:Echo.private(`order.${orderId}`) .listen('ShippingStatusUpdated', (e) => { console.log(e.update); });
その後は、通常どおりイベントをトリガーするだけです。イベントがトリガーされると、キュー タスクが指定したブロードキャスト ドライバーにイベントを自動的にブロードキャストします。
#ブロードキャスト名Laravel はデフォルトでイベントのクラス名をブロードキャスト名として使用してイベントをブロードキャストします。ただし、イベント クラスでbroadcastAs
メソッドを定義してブロードキャスト名をカスタマイズすることもできます。
<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class ServerCreated implements ShouldBroadcast{ use SerializesModels; public $user; /** * 创建一个新的事件实例。 * * @return void */ public function __construct(User $user) { $this->user = $user; } /** *获得事件广播的频道。 * * @return Channel|array */ public function broadcastOn() { return new PrivateChannel('user.'.$this->user->id); } }
broadcastAs
メソッドを使用してブロードキャスト名をカスタマイズする場合、リスナーを登録するときは、必ず
.プレフィックスを追加してください。これは、イベントの先頭にアプリケーションの名前空間を付加しないように Echo に指示します。
/** * 事件的广播名称。 * * @return string */ public function broadcastAs(){ return 'server.created'; }
ブロードキャスト データWhen a Whenイベントがブロードキャストされると、そのすべてのpublic
プロパティが自動的にシリアル化され、イベント ペイロードとしてブロードキャストされるため、JavaScript アプリケーションでイベントのすべてのパブリック データにアクセスできるようになります。たとえば、イベントに Eloquent モデルを含む単一のパブリック
$userプロパティがある場合、イベントのブロードキャスト ペイロードは次のようになります:
.listen('.server.created', function (e) { .... });
ただし、より詳細な制御を行う場合は、ブロードキャスト ペイロード上に、イベントにbroadcastWith
メソッドを追加できます。このメソッドは、イベント ペイロードとしてブロードキャストするデータの配列を返します:
{ "user": { "id": 1, "name": "Patrick Stewart" ... } }
ブロードキャスト キュー
デフォルトでは、各ブロードキャスト イベントは、
queue.php
構成ファイルで指定されたデフォルトのキュー接続に対応するデフォルト キューにプッシュされます。イベント クラスでbroadcastQueue
プロパティを定義して、ブロードキャスターが使用するキューをカスタマイズできます。このプロパティでは、ブロードキャスト時に使用するキュー名を指定する必要があります:/** * 指定广播数据。 * * @return array */ public function broadcastWith(){ return ['id' => $this->user->id]; }
イベントをブロードキャストするためにデフォルトのキュー ドライバーの代わりに
sync
キューを使用する場合は、次のように実装できます。ShouldBroadcastNow
ShouldBroadcast
の代わりのインターフェイス:/** * 事件被推送到的队列名称。 * * @var string */ public $broadcastQueue = 'your-queue-name';
ブロードキャスト条件
場合によっては、特定の条件が true の場合にのみイベントをブロードキャストしたい場合があります。これらの条件は、イベント クラスに
broadcastWhen
メソッドを追加することで定義できます:<?php use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow; class ShippingStatusUpdated implements ShouldBroadcastNow{ // }
Authorized Channel
プライベート チャネルの場合、ユーザーは承認された後にのみ監視できます。実装プロセスでは、ユーザーがチャネル名を含む HTTP リクエストを Laravel アプリケーションに送信し、アプリケーションがユーザーがそのチャネルをリッスンできるかどうかを判断します。 Laravel Echo を使用すると、プライベート チャネルへのサブスクリプションを承認する HTTP リクエストが自動的に送信されますが、これらのリクエストに応答する適切なルートを定義する必要があります。
承認ルートの定義
幸いなことに、Laravel では、チャネルの承認リクエストに応答するルートを簡単に定義できます。 Laravel に付属の
BroadcastServiceProvider
では、Broadcast::routes
メソッドの呼び出しを確認できます。このメソッドは、承認リクエストを処理するために/broadcasting/auth
ルートを登録します。/** * 判定事件是否可以广播。 * * @return bool */ public function broadcastWhen(){ return $this->value > 100; }
Broadcast::routes
このメソッドは、ルートをに自動的に配置します。 web
ミドルウェア グループでは、ただし、指定された属性をカスタマイズする場合は、ルーティング属性の配列をこのメソッドに渡すことができます:Broadcast::routes();
Custom Authorization Endpoint
デフォルトでは、Echo は
/broadcasting/auth
エンドポイントを使用してチャネル アクセスを承認します。ただし、authEndpoint
構成オプションを Echo インスタンスに渡すことで、独自の承認エンドポイントを指定できます:Broadcast::routes($attributes);
認可コールバックの定義
次に、チャネル認可を処理するために実際に使用されるロジックを定義する必要があります。このロジックは、アプリケーションに付属の
routes/channels.php
ファイルで完成します。このファイルでは、Broadcast::channel
メソッドを使用して、チャネル認証コールバックを登録できます。window.Echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key', authEndpoint: '/custom/endpoint/auth' });
channel
このメソッドは、チャネル名とチャネルの 2 つのパラメータを受け取ります。コールバック関数。このコールバックは、true
またはfalse
を返すことによって、ユーザーがチャンネルを聞く権限があるかどうかを示します。すべての認可コールバックは、現在の認証済みユーザーを最初のパラメータとして受け取り、追加のワイルドカード パラメータを後続のパラメータとして受け取ります。この例では、
{orderId}
プレースホルダーを使用して、チャネル名の「ID」部分がワイルドカードであることを示します。認可コールバック モデル バインディング
HTTP ルーティングと同様に、チャネル ルーティングでも明示的または暗黙的なルーティング モデル バインディングを利用できます。たとえば、文字列または数値の注文 ID の代わりに、実際の
Order
モデル インスタンスを受信するようにリクエストできます。Broadcast::channel('order.{orderId}', function ($user, $orderId) { return $user->id === Order::findOrNew($orderId)->user_id; });
Authorization callback verify
プライベート チャネルとオンライン ブロードキャスト チャネルは、アプリケーションのデフォルトの認証検証を通じて現在のユーザー ID を認証します。ユーザーが認可のために認証されていない場合、チャネル認可は自動的に拒否され、認可コールバックは実行されません。ただし、必要に応じて、受信リクエストを認証するために複数のカスタム ガードを割り当てることができます:
use App\Order; Broadcast::channel('order.{order}', function ($user, Order $order) { return $user->id === $order->user_id; });
チャネル クラスの定義
アプリケーションが多数の異なるチャネルを使用する場合、
routes/channels.php
ファイルが非常に大きくなる可能性があります。したがって、クロージャを使用する代わりにチャネル クラスを使用してチャネルを承認できます。チャネル クラスを生成するには、make:channel
Artisan コマンドを使用します。このコマンドは、新しいチャネル クラスをApp/Broadcasting
ディレクトリに配置します。Broadcast::channel('channel', function() { // ... }, ['guards' => ['web', 'admin']])
次に、
routes/channels.php
ファイルにチャネルを登録します。php artisan make:channel OrderChannel
最後に、チャネルの承認ロジックを ## のチャネルに追加します。クラスの #join
メソッド。
joinメソッドは、通常チャネル承認クロージャに入れるのと同じロジックを保持します。もちろん、チャネル モデル バインディングを利用することもできます。
use App\Broadcasting\OrderChannel; Broadcast::channel('order.{order}', OrderChannel::class);
{Note} Laravel の他の多くのクラスと同様、チャネル クラスはサービス コンテナを通じて自動的に解決されます。したがって、コンストラクターでチャネル クラスに必要な依存関係をタイプヒントで指定できます。
イベントをブロードキャスト
イベントを定義し、
ShouldBroadcast
インターフェイスを実装するようにマークした後は、event
関数を使用してイベントをトリガーするだけです。 。イベント ディスパッチャは、ShouldBroadcast
インターフェイスを実装するタグ付けされたイベントを認識し、ブロードキャスト用のキューにプッシュします。<?php namespace App\Broadcasting; use App\User;use App\Order; class OrderChannel{ /** * 创建一个新的频道实例。 * * @return void */ public function __construct() { // } /** * 认证用户的频道访问权限。 * * @param \App\User $user * @param \App\Order $order * @return array|bool */ public function join(User $user, Order $order) { return $user->id === $order->user_id; } }
# #他の人にのみブロードキャストする
イベント ブロードキャストを使用するアプリケーションを作成する場合は、
event
の代わりにbroadcast
関数を使用できます。event
関数と同様に、broadcast
関数はサーバー側のリスナーにイベントを配布します。event(new ShippingStatusUpdated($update));
ただし、
broadcast
関数を使用すると、次のこともできます。現在のユーザーをブロードキャスト受信者から除外するtoOthers
メソッド:broadcast(new ShippingStatusUpdated($update));
toOthers
メソッドをいつ使用するかをよりよく理解するために、タスク リスト アプリケーションがあると仮定します。 , ユーザーはタスク名を入力して新しいタスクを作成できます。新しいタスクを作成するには、アプリケーションは/task
ルートにリクエストを行う必要があります。これにより、タスクの作成がブロードキャストされ、新しいタスクに対する JSON 応答が返されます。 JavaScript アプリケーションがルートから応答を受け取ると、次のように新しいタスクをタスク リストに直接挿入します。broadcast(new ShippingStatusUpdated($update))->toOthers();
ただし、タスクの作成もブロードキャストすることを忘れないでください。 JavaScript アプリケーションがタスク リストにタスクを追加するためにこのイベントをリッスンしている場合、タスク リストには重複したタスクが存在します。1 つはルート応答から、もう 1 つはブロードキャストからです。この問題は、
toOthers
メソッドを使用して現在のユーザーにイベントをブロードキャストしないようにブロードキャスターに指示することで解決できます。{注}
toOthers
メソッドを呼び出すには、イベントでIlluminate\Broadcasting\InteractsWithSockets
トレイトを使用する必要があります。設定
Laravel Echo インスタンスを初期化すると、ソケット ID が接続に割り当てられます。 Vue と Axios を使用する場合、このソケット ID は、すべての発信リクエストの
XX-Socket-ID
ヘッダー中央に自動的に追加されます。次に、toOthers
メソッドを呼び出すと、Laravel はリクエストヘッダーからソケット ID を取り出し、このソケット ID を持つ接続にメッセージをブロードキャストしないようにブロードキャスターに指示します。Vue と Axios を使用していない場合は、
X-Socket-ID
リクエスト ヘッダーを送信するように JavaScript アプリケーションを手動で構成する必要があります。Echo.socketId
メソッドを使用してソケット ID を取得できます:axios.post('/task', task) .then((response) => { this.tasks.push(respo });
#Receive Broadcast
# ##################################Laravel Echo のインストール
Laravel Echo は JavaScript ライブラリであり、このライブラリを使用すると、チャンネルに登録したり、Laravel によってブロードキャストされるイベントを聞いたりすることが非常に簡単になります。 Echo は、NPM パッケージ マネージャーを通じてインストールできます。この場合、Pusher ブロードキャスターを使用するため、
pusher-js
パッケージもインストールします。var socketId = Echo.socketId();
Echo をインストールした後、新しい Echo インスタンスを作成できます。これを行う理想的な場所は、Laravel フレームワークに付属する
resources/js/bootstrap.js
ファイルの下部です。npm install --save laravel-echo pusher-js
When you use
pusher
コネクタを使用して Echo インスタンスを作成する場合、cluster
と接続を暗号化する必要があるかどうかを指定することもできます:import Echo from "laravel-echo" window.Echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key' });
既存のクライアント インスタンスを使用する
Echo で使用したい Pusher または Socket.io クライアント インスタンスがすでにある場合は、
client
設定オプションを介して Echo に渡すことができます:window.Echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key', cluster: 'eu', encrypted: true });
イベントをリッスンする
Echo をインストールしてインスタンス化した後、イベント ブロードキャストのリッスンを開始できます。まず、
privatechannel
メソッドを使用してチャネル インスタンスを取得し、次にlisten
メソッドを呼び出して指定されたイベントをリッスンします。プライベート チャネルでのイベントの場合は、メソッドを使用してください。
listen
メソッドを連鎖することで、単一のチャネルで複数のイベントをリッスンできます:const client = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key', client: client });
Exit Channelチャンネルを離れるには、Echo インスタンスで
leaveChannelメソッドを呼び出します。
Leave
プライベート チャネルとオンライン チャネルを離れる場合は、次のように呼び出します。Echo.channel('orders') .listen('OrderShipped', (e) => { console.log(e.order.name); });
メソッド:
Echo.private('orders') .listen(...) .listen(...) .listen(...);
Namespace上記の例でお気づきかもしれませんが、 , イベント クラスの完全な名前空間を指定しませんでした。これは、Echo がデフォルトでイベントを
App\Events名前空間に置くためです。ただし、#namespace
構成アイテムを渡して、Echo をインスタンス化するときにルート名前空間を指定できます。
Echo.leaveChannel('orders');
さらに、Echo を使用してイベントをサブスクライブするときに、イベント クラスに # を追加できます。 ##.
プレフィックス。これにより、完全修飾クラス名を指定できます:Echo.leave('orders');
プレゼンス チャネルはプライベート IT 上に構築されます。はチャネルのセキュリティに基づいて構築されており、誰がチャネルに登録しているかを知るという追加機能を提供します。これにより、1 人のユーザーがページを閲覧しているときに、同じページを閲覧している他のユーザーに通知するなど、強力な共同アプリケーションを構築することが非常に簡単になります。承認されたプレゼンス チャネル
すべてのプレゼンス チャネルはプライベート チャネルでもあるため、ユーザーは にアクセスする前に 承認される必要があります。ただし、プレゼンス チャネルの承認コールバック関数を定義する場合、ユーザーがチャネルに参加している場合、
true
は返されず、ユーザーに関する情報の配列が返される必要があります。認可コールバック関数によって返されたデータは、JavaScript アプリケーションのプレゼンス チャネル イベント リスナーによって使用できます。ユーザーがプレゼンス チャネルに参加する権限を持たない場合は、
false
またはnull
:window.Echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key', namespace: 'App.Other.Namespace' });
# を返す必要があります。 #プレゼンス チャネルに参加するEcho のjoin
メソッドを使用してプレゼンス チャネルに参加できます。
joinメソッドは、
PresenceChannelを実装するオブジェクトを返します。これにより、
listen## を公開することで、here
とjoining# にサブスクライブできるようになります。 # メソッド。 ## および
leavingイベント。
Echo.channel('orders') .listen('.Namespace.Event.Class', (e) => { // });
here コールバック関数は、チャネルに正常に参加し、現在チャネルに登録している他のすべてのユーザーを含むユーザー情報の配列を受け取った直後に実行されます。
joining
メソッドは、新しいユーザーがチャンネルに参加するときに実行され、
leavingメソッドはユーザーがチャンネルから退出するときに実行されます。
#プレゼンス チャネルへのブロードキャストプレゼンス チャネルは、パブリック チャネルやプライベート チャネルと同様にイベントを受信できます。チャット ルームの例を使用すると、NewMessageイベントをチャット ルームのプレゼンス チャネルにブロードキャストすることができます。これを実装するには、イベントの
broadcastOnメソッドから
toOthersPresenceChannel
インスタンスを返します。
パブリック イベントやプライベート イベントと同様に、プレゼンス チャネル イベントも使用できますBroadcast::channel('chat.{roomId}', function ($user, $roomId) { if ($user->canJoinRoom($roomId)) { return ['id' => $user->id, 'name' => $user->name]; } });
broadcast
ブロードキャストする関数。同様に、メソッドを使用して現在のユーザーをブロードキャスト レシーバーから除外することもできます。
Echo のEcho.join(`chat.${roomId}`) .here((users) => { // }) .joining((user) => { console.log(user.name); }) .leaving((user) => { console.log(user.name); });
listen
メソッドを通じて参加イベントを聞くことができます :/** * 获得事件广播的频道。 * * @return Channel|array */ public function broadcastOn(){ return new PresenceChannel('room.'.$this->message->room_id); }
に送信されるすべてのメッセージは、クライアント側イベント
{注} Pusher を使用する場合、クライアント側イベントを送信したい場合は、「クライアント側イベント」を有効にするために「」セクションを設定する必要があります。イベント」オプション。
Laravel アプリケーションに通知せずに、接続されている他のクライアントにイベントをブロードキャストしたい場合があります。これは、別のユーザーが特定の画面に情報を入力していることをアプリのユーザーに警告するなど、「入力中」の通知を処理する場合に特に便利です。Echo の
whisperメソッドを使用してクライアント イベントをブロードキャストできます:
listenForWhisperbroadcast(new NewMessage($message)); broadcast(new NewMessage($message))->toOthers();
メソッドを使用してクライアント イベントをリッスンできます:
##メッセージ通知 イベント ブロードキャストとメッセージ通知を組み合わせることで、JavaScript アプリケーションはページを更新して新しいメッセージ通知を受信できます。 。これを行う前に、ブロードキャスト通知チャネルの使用方法に関するドキュメントを必ず読んでください。 ブロードキャスト チャネルを使用してメッセージ通知を構成した後、Echo のEcho.join(`chat.${roomId}`) .here(...) .joining(...) .leaving(...) .listen('NewMessage', (e) => { // });
notification
メソッドを使用してブロードキャスト イベントをリッスンできます。チャネル名は、メッセージ通知を受信するエンティティのクラス名と一致する必要があることに注意してください:Echo.private('chat') .whisper('typing', { name: this.user.name });
この例では、
App\Userブロードキャスト経由で送信されます。
Web サイトで初めて公開されました。チャネル インスタンスのメッセージ通知はコールバックで受信されます。
App.User.{id}チャネルの承認コールバック関数は、Laravel フレームワークの組み込み
BroadcastServiceProviderに含まれています。
この記事は、
LearnKu.com