laravel7.0 ブロードキャスト メカニズム (Redisソケット.io)
イベントをブロードキャストする前に、まずApp\を登録する必要があります。プロバイダー\ブロードキャストサービスプロバイダー
。新しくインストールした Laravel アプリケーションでは、config/app.php
構成ファイルの providers
配列内の対応するサービス プロバイダーのコメントを解除するだけで済みます。このプロバイダーを使用すると、ブロードキャスト認証ルートとコールバックを登録できます。
関連コラム チュートリアルの推奨事項: 「laravel チュートリアル」
.env
ファイル内のブロードキャスト ドライバーを redis
に変更する必要があります:
BROADCAST_DRIVER=redis
php artisan make:event OrderShipped
OrderShipped.phpこのディレクトリに生成されます。自動的に生成された OrderShipped クラスに次の変更を加える必要があります。
不要) [デフォルトでは、Laravel はイベントのクラス名を使用してイベントをブロードキャストしますが、イベントで渡すことができます。 ブロードキャスト名をカスタマイズするために、broadcastAs メソッドを定義します。]
完全な変更は次のとおりで、直接置き換えることができますAPI ルーティングの設定<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class OrderShipped implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; //可添加任意成员变量 public $id; //事件构造函数 public function __construct($id) { $this->id = $id; } //自定义广播的消息名 public function broadcastAs() { return 'anyName'; } /** * Get the channels the event should broadcast on. * * @return \Illuminate\Broadcasting\Channel|array */ public function broadcastOn() { return new Channel('orderStatus'); } }ログイン後にコピー
Route::get('/ship', function (Request $request) { $id = $request->input('id'); broadcast(new OrderShipped($id)); // 触发事件 return 'Order Shipped!'; });
composer require laravel/uiphp artisan ui vue --auth
composer require predis/predis
Redis ブロードキャストは、ブロードキャスト用の Redis の pub/sub 機能。ただし、Redis を受け入れることができる機能と組み合わせる必要があります。メッセージの Websocket サーバーは、メッセージを Websocket チャネルにブロードキャストするようにペアリングされます。#Redis がイベントをブロードキャストすると、イベントは指定されたチャネルにパブリッシュされ、渡されるデータは JSON 形式の文字列で、イベント名、ロード データ データ、イベント ソケット ID を生成したユーザーが含まれます
laravel-echo-server をインストールし、Redis Sub をサブスクライブします
を使用する場合は、次のものが必要ですオープンソースプロジェクト laravel-echo-server を使用します。そこで、laravel-echo-serverグローバルインストール
npm install -g laravel-echo-server
laravel-echo-server init // 是否在开发模式下运行此服务器(y/n) 输入y ? Do you want to run this server in development mode? (y/N)// 设置服务器的端口 默认 6001 输入 6001就可以了 或者你想要的 ? Which port would you like to serve from? (6001)// 想用的数据库 选择 redis ? Which database would you like to use to store presence channel members? (Use arrow keys)❯ redis sqlite // 这里输入 你的laravel 项目的访问域名 ? Enter the host of your Laravel authentication server. (http://localhost)// 选择 网络协议 http ? Will you be serving on http or https? (Use arrow keys)❯ http https // 您想为HTTP API生成客户端ID/密钥吗 N ? Do you want to generate a client ID/Key for HTTP API? (y/N)// 要设置对API的跨域访问吗?(y/n)N Configuration file saved. Run laravel-echo-server start to run server. //您希望将此配置另存为什么? (laravel-echo-server.json)回车就行 ? What do you want this config to be saved as? (laravel-echo-server.json)
laravel-echo-server start
L A R A V E L E C H O S E R V E R version 1.6.0 ⚠ Starting server in DEV mode... ✔ Running at localhost on port 6001 ✔ Channels are ready. ✔ Listening for http events... ✔ Listening for redis events... Server ready!
Channel: laravel_database_orderStatus Event: anyName
laravel-echo と
socket.io の依存関係
npm i --save socket.io-client npm i --save laravel-echo
を
package.json に追加する必要があります
resource/js/bootstrap.js を編集し、次のコードを追加しますimport Echo from "laravel-echo"; window.io = require("socket.io-client"); window.Echo = new Echo({ broadcaster: "socket.io", host: window.location.hostname + ":6001" });
在 resources/views/
下建立页面 test.blade.php 内容为
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="csrf-token" content=""> <title>News Room</title> <link href="" rel="stylesheet"> </head> <body> <div class="content"> News Room </div> <script src=""></script> <script> Echo.channel("laravel_database_orderStatus") // 广播频道名称 .listen(".anyName", e => { // 消息名称 console.log(e); // 收到消息进行的操作,参数 e 为所携带的数据 }); </script> </body> </html>
js 代码的意思是收听 news 通道内的 News 事件对象,将接收到的事件在控制台打印出来。
npm install && npm run watch
相关推荐:最新的五个Laravel视频教程
以上がlaravel7.0のブロードキャストメカニズムについて話しましょう。欲しいものは必ずあります!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。