伺服器發送事件 (SSE) 是應用程式中啟用即時通知或更新的絕佳解決方案。與 WebSocket 不同,SSE 允許從伺服器到客戶端的單向通信,使其輕量級且易於實現。在本教程中,我們將介紹如何在 Laravel 後端中設定 SSE 並在 Vue.js 前端中使用事件。
概述
我們將使用 SSE 建立一個簡單的即時通知系統。每當經過身份驗證的用戶有新通知時,伺服器 (Laravel) 就會將通知推送到客戶端 (Vue.js)。以下是我們將要介紹的內容的細分:
- 後端 (Laravel):設定 SSE 端點來傳送通知。
- 前端 (Vue.js):設定 EventSource 來監聽傳入通知。
第 1 步:後端(Laravel)
1.1 在 Laravel 建立 SSE 路由
在您的routes/api.php中,為SSE流建立一個端點。這將允許您的 Vue.js 前端建立 SSE 連線並監聽通知。
使用 AppHttpControllersNotificationController;
Route::get('/notifications', [NotificationController::class, 'get']);
1.2 串流通知的控制器方法
接下來,在NotificationController中,實作從資料庫取得未讀取通知的邏輯,並透過SSE將它們串流傳輸到客戶端。
namespace App\Http\Controllers; use App\Models\Notification; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class NotificationController extends Controller { public function get(Request $request) { $headers = [ "Content-Type" => "text/event-stream", "Cache-Control" => "no-cache", "Connection" => "keep-alive", "X-Accel-Buffering" => "no", ]; return response()->stream(function () { while (true) { // Fetch the unread notifications for the authenticated user $notifications = Notification::where('clicked', 0) ->where('user_id', 2) // For now, hardcoding the user ID, you can replace it with Auth::id() for dynamic user handling ->get(); // If there are notifications, send them to the frontend if ($notifications->isNotEmpty()) { // Format notifications as JSON and send them via SSE echo "data: " . json_encode($notifications) . "\n\n"; } // Flush the output buffer ob_flush(); flush(); // Sleep for a few seconds before checking again sleep(5); } }, 200, $headers); } }
說明:
串流回應:response()->stream() 方法用來傳送無限的事件流。
通知:我們正在查詢通知模型以取得特定使用者的未讀通知(點擊 = 0)。通知被編碼為 JSON 並發送到客戶端。
標頭:標頭是為 SSE 設定的(內容類型:text/event-stream)。
無限循環: while (true) 循環保持連線打開,並每 5 秒不斷發送新通知(可透過修改 sleep(5) 進行調整)。
第 2 步:前端 (Vue.js)
現在,讓我們設定 Vue.js 前端以使用 EventSource API 監聽這些通知。
2.1。設定 Vue 元件監聽 SSE 事件
建立一個 Vue 元件來監聽來自 SSE 流的傳入事件。
<template> <div> <h3 id="Unread-Notifications">Unread Notifications</h3> <ul v-if="notifications.length"> <li v-for="notification in notifications" :key="notification.id"> {{ notification.message }} </li> </ul> <p v-else>No new notifications</p> </div> </template> <script> export default { data() { return { notifications: [], // Store notifications }; }, mounted() { // Initialize EventSource to listen to the /api/notifications endpoint const eventSource = new EventSource('/api/notifications'); // Handle incoming events from SSE eventSource.onmessage = (event) => { const data = JSON.parse(event.data); // Parse JSON data from the server this.notifications = data; // Update notifications list }; // Handle errors eventSource.onerror = (error) => { console.error("EventSource failed:", error); eventSource.close(); // Close the connection if there's an error }; }, beforeDestroy() { // Close the SSE connection when the component is destroyed if (this.eventSource) { this.eventSource.close(); } } }; </script>
說明:
- EventSource:我們建立一個監聽 /api/notifications 端點的 EventSource 實例。這將建立與伺服器的持久連線。 onmessage:此事件偵聽器處理傳入訊息。資料從 JSON 解析並新增到通知數組。 onerror:如果發生錯誤(例如,如果 SSE 連線遺失),我們會記錄錯誤並關閉連線。
- beforeDestroy:為了防止記憶體洩漏,元件銷毀時會關閉SSE連線。
結論
在本教程中,我們在 Laravel 後端和 Vue.js 前端中使用伺服器發送事件 (SSE) 設定即時通知。 SSE 提供了一種簡單且有效率的方式來向客戶端推送即時更新,使其成為通知等功能的絕佳選擇。只需最少的設置,您就可以透過即時功能增強您的應用程式。
以上是Laravel 和 Vue.js 中伺服器發送事件 (SSE) 的即時通知的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

核心要點 JavaScript 中的 this 通常指代“擁有”該方法的對象,但具體取決於函數的調用方式。 沒有當前對象時,this 指代全局對象。在 Web 瀏覽器中,它由 window 表示。 調用函數時,this 保持全局對象;但調用對象構造函數或其任何方法時,this 指代對象的實例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。這些方法使用給定的 this 值和參數調用函數。 JavaScript 是一門優秀的編程語言。幾年前,這句話可

該帖子編寫了有用的作弊表,參考指南,快速食譜以及用於Android,BlackBerry和iPhone應用程序開發的代碼片段。 沒有開發人員應該沒有他們! 觸摸手勢參考指南(PDF)是Desig的寶貴資源

jQuery是一個很棒的JavaScript框架。但是,與任何圖書館一樣,有時有必要在引擎蓋下發現發生了什麼。也許是因為您正在追踪一個錯誤,或者只是對jQuery如何實現特定UI感到好奇


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

WebStorm Mac版
好用的JavaScript開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器