小編給大家分享一下laravel7.0廣播機制的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

為沙河等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及沙河網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、成都網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設、沙河網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
laravel7.0廣播機制(redis + socket.io)
在廣播任意事件之前,首先需要注冊App\Providers\BroadcastServiceProvider。在新安裝的 Laravel 應用中,你只需要取消 config/app.php 配置文件中 providers 數(shù)組內(nèi)對應服務提供者之前的注釋即可。該提供者允許你注冊廣播授權路由和回調(diào)
相關欄目教程
需要修改 .env 文件中的廣播驅動為 redis:
BROADCAST_DRIVER=redis
php artisan make:event OrderShipped
執(zhí)行上訴命令之后 app 目錄下會出現(xiàn)一個 Events 目錄,在該目錄下產(chǎn)生了廣播事件類 OrderShipped.php。我們要對自動生成的 OrderShipped 類進行以下修改
增加對 ShouldBroadcast 的實現(xiàn)
修改 broadcastOn 方法,使用公共廣播通道 orderStatus
自定義廣播的消息名(非必須)【默認情況下,Laravel 會使用事件的類名來廣播事件,不過,你可以通過在事件中定義 broadcastAs 方法來自定義廣播名稱:】
修改構造函數(shù)
完整修改如下 可直接替換
<?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;
//事件構造函數(shù)
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)); // 觸發(fā)事件
return 'Order Shipped!';
});composer require laravel/uiphp artisan ui vue --auth
因為咱們使用 Redis 廣播,需要安裝 Predis 庫:
composer require predis/predis
Redis 廣播使用 Redis 的 pub/sub 功能進行廣播;不過,你需要將其和能夠接受 Redis 消息的 Websocket 服務器進行配對以便將消息廣播到 Websocket 頻道
當 Redis 廣播發(fā)布事件時,事件將會被發(fā)布到指定的頻道上,傳遞的數(shù)據(jù)是一個 JSON 格式的字符串,其中包含了事件名稱、負載數(shù)據(jù) data、以及生成事件 socket ID 的用戶
如果使用 pusher 那么直接使只用 laravel 就可以了,如果使用 Redis + socket.io則需要使用開源項目 laravel-echo-server 。所以我們現(xiàn)在要使用 laravel-echo-server
全局安裝
npm install -g laravel-echo-server
laravel-echo-server init // 是否在開發(fā)模式下運行此服務器(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)// 想用的數(shù)據(jù)庫 選擇 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)// 選擇 網(wǎng)絡協(xié)議 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!
在瀏覽器上執(zhí)行 http://yourhost/api/ship?id=16
Channel: laravel_database_orderStatus Event: anyName
laravel-echo-server 連接成功!
由于前端使用的是 laravel-echo來收聽廣播,我們選擇的底層實現(xiàn)方式是socket.io。所以首先我們要在package.json中添加 laravel-echo 和 socket.io的依賴
npm i --save socket.io-client npm i --save laravel-echo
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 內(nèi)容為
<!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); // 收到消息進行的操作,參數(shù) e 為所攜帶的數(shù)據(jù)
});
</script>
</body>
</html>js 代碼的意思是收聽 news 通道內(nèi)的 News 事件對象,將接收到的事件在控制臺打印出來。
npm install && npm run watch
以上是“l(fā)aravel7.0廣播機制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當前名稱:laravel7.0廣播機制的示例分析
網(wǎng)站路徑:http://www.chinadenli.net/article12/jdgegc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、虛擬主機、商城網(wǎng)站、關鍵詞優(yōu)化、品牌網(wǎng)站建設、品牌網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)