服务器发送事件 (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中文网其他相关文章!

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载
最流行的的开源编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境