返回顶部
首页 > 资讯 > 精选 >Laravel如何快速创建简单事件流
  • 691
分享到

Laravel如何快速创建简单事件流

2023-07-04 22:07:38 691人浏览 独家记忆
摘要

这篇文章主要介绍“Laravel如何快速创建简单事件流”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Laravel如何快速创建简单事件流”文章能帮助大家解决问题。先决条件在开始之前,你需要在机器上安

这篇文章主要介绍“Laravel如何快速创建简单事件流”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Laravel如何快速创建简单事件流”文章能帮助大家解决问题。

先决条件

在开始之前,你需要在机器上安装 Laravel。

我将在这个演示中使用 DigitalOcean ubuntu Droplet 。如果你愿意,你可以使用我的会员代码获得免费 $100 DigitalOcean 积分来启动你自己的服务器

如果你还没有,可以按照本教程中的步骤进行操作:

  • How to Install Laravel on DigitalOcean with 1-Click

或者可以使用这个很棒的脚本进行安装:

创建一个 Controller

让我们从创建一个处理事件流的控制器开始。

使用以下命令:

PHP artisan make:controller EventStreamController

这将在 App\Http\Controllers 目录中创建一个新控制器。

添加事件流方法

一旦我们创建了我们的控制器,我们需要向它添加 stream 方法。 该方法将用于发送事件流。

打开 EventStreamController.php 文件并添加以下代码:

<?phpnamespace App\Http\Controllers;use Carbon\Carbon;use App\Models\Trade;class StreamsController extends Controller{        public function stream(){        return response()->stream(function () {            while (true) {                echo "event: ping\n";                $curDate = date(DATE_ISO8601);                echo 'data: {"time": "' . $curDate . '"}';                echo "\n\n";                $trades = Trade::latest()->get();                echo 'data: {"total_trades":' . $trades->count() . '}' . "\n\n";                $latestTrades = Trade::with('user', 'stock')->latest()->first();                if ($latestTrades) {                    echo 'data: {"latest_trade_user":"' . $latestTrades->user->name . '", "latest_trade_stock":"' . $latestTrades->stock->symbol . '", "latest_trade_volume":"' . $latestTrades->volume . '", "latest_trade_price":"' . $latestTrades->stock->price . '", "latest_trade_type":"' . $latestTrades->type . '"}' . "\n\n";                }                ob_flush();                flush();                // 如果客户端中止连接,则中断循环(关闭页面)                if (connection_aborted()) {break;}                usleep(50000); // 50ms            }        }, 200, [            'Cache-Control' => 'no-cache',            'Content-Type' => 'text/event-stream',        ]);    }}

这里要注意的主要事项是:

  • 我们使用 response()->stream() 方法来创建事件流。

  • 然后我们有一个无限循环,每隔50ms发送一次事件流。

  • 如果客户端中止连接,我们使用 ob_flush()flush() 来发送事件流。

  • 我们使用 sleep() 发送下一个事件之前等待50ms。

  • 我们使用 connection_aborted() 来中断循环,如果客户端中止了连接。

  • 我们使用 Carbon\Carbon 类获取当前日期。

  • 我们使用 App\Models\Trade 模型获取最新交易。这仅用于演示,你可以使用任何你想要的模型。

  • Content-Type 标头设置为 text/event-stream 以告知浏览器响应是事件流。

启用输出缓冲

为了使上述代码正常工作,我们需要在你的 PHP.ini 文件中启用输出缓冲。 这是通过将以下行添加到 php.ini 文件中完成的:

output_buffering = On

进行此更改后,可能需要重新加载 PHP-FPM 服务。 或者如果你使用的是 Apache,则可以重新启动 Apache。

添加路由

当请求 /stream 路由时,我们想调用 ``stream` 方法。

路由将被添加到routes/WEB.php 文件中,如下所示:

use App\Http\Controllers\StreamsController;Route::get('/stream', [StreamsController::class, 'stream']);

使用前端的事件流

你可以使用 vue.js 之类的前端框架来处理事件流。 但是对于这个演示,我将使用纯 javascript

添加到 blade 模板中的 JavaScript 片段如下所示:

const eventSource = new EventSource('/stream');eventSource.onmessage = function(event) {    const data = JSON.parse(event.data);    if (data.time) {        document.getElementById('time').innerhtml = data.time;    }    const newElement = document.createElement("li");    const eventList = document.getElementById("list");    newElement.textContent = "message: " + event.data;    eventList.appendChild(newElement);}

SSE vs websockets

事件流很棒且易于使用,但与 WebSockets 等其他流协议相比,它也有一些优点和缺点。

例如,SSE 是单向的,这意味着一旦建立连接,服务器只会向客户端发送数据,而客户端不能将数据发送回服务器。

与长轮询不同,使用 WebSockets,你只有一个与服务器的连接,类似于 SSE(服务器发送事件)。 连接是双工的,这意味着你可以从服务器发送和接收数据。

关于“Laravel如何快速创建简单事件流”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Laravel如何快速创建简单事件流

本文链接: https://lsjlt.com/news/347911.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Laravel如何快速创建简单事件流
    这篇文章主要介绍“Laravel如何快速创建简单事件流”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Laravel如何快速创建简单事件流”文章能帮助大家解决问题。先决条件在开始之前,你需要在机器上安...
    99+
    2023-07-04
  • 如何快速创建网站
    这篇文章主要介绍“如何快速创建网站”,在日常操作中,相信很多人在如何快速创建网站问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何快速创建网站”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!创建自己的网站一...
    99+
    2023-06-10
  • 如何快速创建Android模拟器
    调试手机应用程序一般先用模拟器来实现,只是因为每次都发布到手机上调试太麻烦了。当应用程序在模拟器上调试没错后,再发布到手机运行验证就行了。 一、模拟器创建方式 为了在模拟器中观...
    99+
    2022-06-06
    Android
  • 如何使用ASP和Laravel来创建快速而可靠的索引API?
    在当今数字化时代,API(Application Programming Interface)的重要性不言而喻。API使得应用程序之间的互联变得更加容易和可靠,同时也使得开发人员能够更快地构建应用程序。本文将介绍如何使用ASP和Larave...
    99+
    2023-09-21
    laravel 索引 api
  • WCF如何创建简单应用程序
    这篇文章主要介绍WCF如何创建简单应用程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是WCF?WCF, 英文全称(windows Communication Foundation) , 即为windows通讯...
    99+
    2023-06-28
  • Spring事务执行流程及如何创建事务
    目录执行流程具体分析创建事务主要两部分:获取事务状态构建事务信息接上节内容,Spring事务执行原理通过创建一个BeanFactoryTransactionAttributeSour...
    99+
    2024-04-02
  • 如何在ASP开发中快速创建和编辑Shell文件?
    ASP是一种广泛应用于网络开发的技术,它可以帮助开发者快速搭建Web应用。当我们需要在ASP开发中创建和编辑Shell文件时,我们需要掌握一些技巧来提高我们的效率。 首先,我们需要了解什么是Shell文件。Shell文件是一种文本文件,它包...
    99+
    2023-10-17
    shell 文件 ide
  • Win8如何在桌面创建快捷方式(3种简单的方式)
      很多网友在问Win8如何在桌面创建快捷方式,本次介绍3种简单的方式。下面小编就以联想的“联想远程软件服务”应用程序为例。告诉大家如何在在桌面创建快捷方式。   1. 找到安装应用...
    99+
    2022-06-04
    快捷方式 桌面 简单
  • 如何用Vite构建工具快速创建Vue项目
    目录和Webpack相比,Vite具有以下特点Vite构建Vue项目构建过程可能会发生的一些问题总结和Webpack相比,Vite具有以下特点 1、快速的冷启动,不需要等待打包 2、...
    99+
    2024-04-02
  • 如何快速创建React项目并配置webpack
    本文小编为大家详细介绍“如何快速创建React项目并配置webpack”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何快速创建React项目并配置webpack”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1...
    99+
    2023-06-26
  • java如何简单快速处理xml中的数据
    这篇文章给大家介绍java如何简单快速处理xml中的数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java有什么方便解析XML的类库吗?比如处理如下这段XML:<xml version="1.0&q...
    99+
    2023-06-03
  • java如何简单快速处理 json 中的数据
    java如何简单快速处理 json 中的数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JSONstr.json的runners字段是子文档,子文档有3个字段:horseId...
    99+
    2023-06-03
  • sublime如何创建一个简单的网页
    这篇文章主要介绍了sublime如何创建一个简单的网页,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法步骤:在桌面上新建一个文件夹。打开文件夹在里面新建一个html文件。用...
    99+
    2023-06-15
  • 如何创建 JavaScript 自定义事件
    目录怎么创建自定义事件事件定制冒泡 bubbles可取消 cancelable组合 composed给事件传递自定义数据命名约定双击事件总结前言: 相信大家肯定处理过很多的事件监听,...
    99+
    2024-04-02
  • win11如何创建文件夹快捷键
    这篇“win11如何创建文件夹快捷键”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win11如何创建文件夹快捷键”文章吧。w...
    99+
    2023-07-02
  • oracle如何快速重建控制文件
    小编给大家分享一下oracle如何快速重建控制文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在pfile参数文件中添加下面隐...
    99+
    2024-04-02
  • 聊聊Angular中如何创建简单独立组件并使用
    本篇文章带大家了解一下Angular中的独立组件,介绍一下如何创建简单的独立组件以及如何在 Angular 应用程序中使用它们,希望对大家有所帮助!如果你正在学习 Angular,那么你可能已经听说过独立组件(Component)。顾名思义...
    99+
    2023-05-14
    独立组件 Angular.js
  • MySQL如何快速创建800w条测试数据表
    目录一、数据插入思路1、创建内存表2、创建普通表3、创建存储函数4、创建存储过程6、导入数据7、内存不足8、查看结果9、插入800W条数据二、MySQL深度分页1、测试深度分页一、数...
    99+
    2024-04-02
  • IDEA创建方法时如何快速添加注释
    目录IDEA创建方法时快速添加注释1.setting => Edit => Live Templates2. 新建一个组3.新建一个Live Template4...
    99+
    2023-02-23
    IDEA创建方法 IDEA添加注释 IDEA注释
  • PHP如何通过range()和compact()快速创建数组
    小编给大家分享一下PHP如何通过range()和compact()快速创建数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通过range()和compact()...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作