Laravel 廣播

在 Web 應用程式中,即時通訊是指使用者立即或以最小延遲交換資訊的能力。

即時通訊的一些範例包括:即時聊天、即時協作、無需手動刷新頁面即可發生的通知和更新…

WebSocket、伺服器發送事件 (SSE) 和長輪詢等技術通常用於實現即時通信,從而允許 Web 應用程式向使用者提供互動式動態體驗。

7 minuti

他們要求您為電子商務網站開發即時聊天功能,但您不知道該使用什麼技術。您的一些同事已經告訴您一些技術,例如 的WebSocket,但你不知道如何實現服務 廣播.

您在正確的時間來到了正確的地點:事實上,下面我將為您提供所有必要的說明,以利用以下優勢: Laravel 廣播,而 laravel 混響 用於管理即時通信,然後實現即時聊天。別擔心,這些並不是複雜的操作,重要的是對如何組織和建立一切有清晰的想法:您將在本文的過程中了解入門所需的內容。

那麼,您認為現在就採取行動呢?舒服地坐著,為自己騰出幾分鐘的時間,閱讀我要告訴你的一切 在 Laravel 廣播上 e Laravel 殘響:我確信,讀完本指南後,您將完全有能力出色地完成工作。話雖如此,我所能做的就是祝您閱讀愉快,工作順利!

Laravel 殘響 它是應用程式的即時通訊工具 Laravel。允許連接 WebSocket的 客戶端和伺服器之間,允許即時更新和交互,而無需不斷刷新頁面。 混響 它通常用於需要即時更新或即時訊息功能的應用程式中,提供平滑有效的方式來管理即時資料交換。

什麼是 Laravel 混響

Laravel Reverb 是一個概念,結合了 Laravel(一種流行的 PHP 框架,以其優雅的語法和強大的功能而聞名)和 Reverb(專為 Web 應用程式中的即時通訊而設計的 WebSocket 伺服器)。

在這種情況下,Reverb 是專門為 Laravel 應用程式建置的第一方 WebSocket 伺服器。它促進客戶端(瀏覽器)和伺服器端之間的即時通信,實現即時更新、即時訊息、通知和協作功能等功能,而無需不斷刷新頁面。

透過將 Laravel 與 Reverb 集成,開發人員可以創建互動式和響應式 Web 應用程序,為使用者提供流暢、動態的體驗。

Laravel Reverb 的主要特點

· 即時更新:以新資料即時更新客戶端介面,無需重新載入頁面。

· 即時聊天:支援用戶之間的即時訊息傳遞和通訊。

· 通知:即時向客戶發送推播通知,以便及時更新。

· 協作編輯:促進共享文件或專案的同步編輯。

· 可擴充性:有效處理大量並發連線。

· 客製化:能夠即時調整功能以適應特定的應用程式需求。

使用 Laravel Reverb 的主要好處

Laravel Reverb 是一款遊戲規則改變者,適用於希望創建具有即時通訊功能的動態、響應式 Web 應用程式的開發人員。以下是 Laravel Reverb 提供的一些主要優點:

快速性能: 透過 Laravel Reverb 的最佳化架構體驗卓越的速度,即使在重負載下也能確保流暢的資料流和回應靈敏的使用者介面。

輕鬆整合: 將 Laravel Reverb 與 Laravel 的廣播功能無縫集成,輕鬆部署和利用 Laravel Forge 來簡化頻道訂閱和活動管理。

簡化的可擴展性: 利用 Laravel Reverb 內建的水平擴展支援輕鬆擴展您的應用程序,有效管理跨多個伺服器的連接和通道,以滿足不斷增長的流量需求。

與 Pusher 協定的兼容性: 利用 Laravel Pusher 協議的強大功能,將 WebSockets 與 Laravel Reverb 結合起來,與 Laravel Broadcasting 和 Echo 無縫集成,以快速高效地實現即時通訊。

追蹤掌握: 利用 Laravel Reverb 中 Pulse 的內建支援進行即時監控,確保平穩運行和系統運行狀況,從而實現無縫的用戶體驗。

Laravel 廣播安裝

如果您需要為新項目增加傳輸容量,那麼應該這樣做。如果您正在處理現有項目,請執行以下命令:

composer install
php artisan broadcast:install

此命令建立必要的配置和所需的檔案:

如果你查看資料夾 resources/js,你會發現一個新生成的文件 迴聲.js,管理連接 WebSocket的.

設定檔 Laravel 廣播: config/broadcasting.php

混響設定檔 : config/reverb.php

配置廣播驅動程式

配置驅動程式 廣播 你必須在文件中設定參數 .env di Laravel,這樣的驅動程式 播放 混響。這是一個例子:

BROADCAST_DRIVER=reverb
REVERB_APP_ID=your_app_id
REVERB_APP_KEY=your_app_key
REVERB_APP_SECRET=your_app_secret
REVERB_HOST="yourhost.test"
REVERB_PORT=8080
REVERB_SCHEME=https

VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST="${REVERB_HOST}"
VITE_REVERB_PORT="${REVERB_PORT}"
VITE_REVERB_SCHEME="${REVERB_SCHEME}"

定義廣播頻道

在創建事件之前,我們需要定義事件將在其上廣播的頻道。為此,我們需要打開該文件 routes/channels.php 並添加我們要使用的通道定義。渠道可以是私有的、公共的:

  • 例子 私人頻道:
Broadcast::channel('App.User.{id}', function ($user, $id) {
    return $user->id === $id;
});
  • 例子 公共頻道的:

如果您想在公共頻道上廣播,只需定義公共路由而不進行任何身份驗證檢查:

Broadcast::channel('public-updates', function () {
    return true;
});

建立事件類

若要即時傳送訊息,您需要定義將廣播的事件。為此,您需要執行以下命令 artisan:

php artisan make:event UserEvent

上課 UserEvent 生成,實現介面 ShouldBroadcast 並新增廣播事件所需的導入。這是一個範例實作:

例子 私人頻道的

namespace App\Events;

use App\Models\User;
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 UserEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     */
    public function __construct(public $downloadURL, public User $user)
    {
        //
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return array<int, \Illuminate\Broadcasting\Channel>
     */
    public function broadcastOn(): array
    {
        return [
            new PrivateChannel("App.User." . $this->user->id),
        ];
    }

    public function broadcastWith(): array
    {
        return array(
            'username' => __('app.welcome_message', ['username' => $this->user->name]),
            'message' => __('events.download_hawb_ready'),
        );
    }

    public function broadcastAs(): string
    {
        return 'user.notification';
    }

}

公共頻道範例:

namespace App\Events;

use App\Models\User;
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 UserEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     */
    public function __construct(public $downloadURL)
    {
        //
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return array<int, \Illuminate\Broadcasting\Channel>
     */
    public function broadcastOn(): array
    {
        return [
            new Channel("public-updates"),
        ];
    }

    public function broadcastWith(): array
    {
        return array(
            'message' => __('events.download_hawb_ready'),
        );
    }

    public function broadcastAs(): string
    {
        return 'public.notification';
    }

}

啟動事件

若要廣播事件,請使用 broadcast()控制器中的助手。您可以透過以下方式提交 UserEvent:

use App\Events\UserEvent;

 broadcast(new UserEvent($data));

設定前端監聽

現在,您需要收聽前端廣播的事件。您可以使用 Laravel 迴聲 同 混響 WebSocket 去做它。開啟文件 resources/js/echo.js 並添加以下內容 聽眾:

window.Echo = new Echo({
    broadcaster: 'reverb',
    key: import.meta.env.VITE_REVERB_APP_KEY,
    wsHost: import.meta.env.VITE_REVERB_HOST,
    wsPort: import.meta.env.VITE_REVERB_PORT ?? 80,
    wssPort: import.meta.env.VITE_REVERB_PORT ?? 443,
    forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https',
    enabledTransports: ['ws', 'wss'],
});

document.addEventListener('DOMContentLoaded', function () {
    const userID = window.userID;

    window.Echo.private(`App.User.${userID}`)
        .listen('.user.notification', (response) => {
            console.log("Event received:", response);
            showNotification(response);
        });
});

填寫資產

設定活動後 聽眾,您需要編譯前端資源以確保套用變更。運行以下命令:

npm run dev

該命令允許您編譯資產,即文件 JavaScript的,包括 迴聲聽眾.

啟動佇列監聽器

Il Laravel 廣播 它是異步工作的,所以你需要運行 佇列監聽器 處理排隊的事件。要開始 隊列 你需要運行命令:

php artisan queue:listen

此命令啟動即時事件處理並確保正確的傳輸操作。

檢查通道配置

為了確保您的頻道設定正確,請檢查您的配置 routes/channels.php。另外,執行以下命令列出所有已註冊的頻道:

php artisan channel:list


此命令將顯示應用程式中配置的所有廣播頻道。

啟動混響 laravel

接下來需要啟動伺服器 混響 WebSocket。執行以下命令,確保設定參數 --hostname 編寫您的網域或本機環境:

php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="yourhost.test" --debug

這將在指定連接埠上啟動混響伺服器。

設定應用程式路由

確保您的應用程式路由配置正確以包含廣播頻道。您可以如下設定路由:

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__ . '/../routes/web.php',
        commands: __DIR__ . '/../routes/console.php',
        channels: __DIR__ . '/../routes/channels.php',
        health: '/up',
    );

按照以下步驟,您可以成功設定廣播 混響 in Laravel 11. 一旦一切設定正確,您將能夠即時廣播訊息,確保整個應用程式的無縫更新。不要忘記檢查您的配置並使用命令 php artisan channel:list 檢查您的頻道配置。

作者