目录
广播服务提供者
设置 Redis 连接
建立 Event
设置 api 路由
安装前端脚手架
Redis
安装 laravel-echo-server 订阅 Redis Sub
初始化 laravel-echo-server
启动 laravel-echo-server
测试广播
安装 laravel-echo 的前依赖
编辑 resource/js/bootstrap.js 添加如下代码
测试页面
基本构建
首页 php框架 Laravel 聊聊laravel7.0的广播机制,总有你想要的!

聊聊laravel7.0的广播机制,总有你想要的!

Jul 28, 2021 pm 03:57 PM
广播机制

laravel7.0广播机制(Redis + socket.io)

广播服务提供者

在广播任意事件之前,首先需要注册App\Providers\BroadcastServiceProvider。在新安装的 Laravel 应用中,你只需要取消 config/app.php 配置文件中 providers 数组内对应服务提供者之前的注释即可。该提供者允许你注册广播授权路由和回调

相关栏目教程推荐:《laravel教程

设置 Redis 连接

需要修改 .env 文件中的广播驱动为 redis

BROADCAST_DRIVER=redis
登录后复制

建立 Event

php artisan make:event OrderShipped
登录后复制

执行上诉命令之后 app 目录下会出现一个 Events 目录,在该目录下产生了广播事件类 OrderShipped.php。我们要对自动生成的 OrderShipped 类进行以下修改

  • 增加对 ShouldBroadcast 的实现

  • 修改 broadcastOn 方法,使用公共广播通道 orderStatus

  • 自定义广播的消息名(非必须)【默认情况下,Laravel 会使用事件的类名来广播事件,不过,你可以通过在事件中定义 broadcastAs 方法来自定义广播名称:】

  • 修改构造函数

完整修改如下 可直接替换

<?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;
    //事件构造函数
    public function __construct($id)
    {
        $this->id = $id;
    }
    //自定义广播的消息名
    public function broadcastAs()
    {
        return &#39;anyName&#39;;
    }
    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel(&#39;orderStatus&#39;);
    }
}
登录后复制

设置 api 路由

Route::get(&#39;/ship&#39;, function (Request $request) {
    $id = $request->input(&#39;id&#39;);
    broadcast(new OrderShipped($id)); // 触发事件
    return &#39;Order Shipped!&#39;;
});
登录后复制

安装前端脚手架

composer require laravel/uiphp artisan ui vue --auth
登录后复制

Redis

因为咱们使用 Redis 广播,需要安装 Predis 库:

composer require predis/predis
登录后复制

Redis 广播使用 Redis 的 pub/sub 功能进行广播;不过,你需要将其和能够接受 Redis 消息的 Websocket 服务器进行配对以便将消息广播到 Websocket 频道

当 Redis 广播发布事件时,事件将会被发布到指定的频道上,传递的数据是一个 JSON 格式的字符串,其中包含了事件名称、负载数据 data、以及生成事件 socket ID 的用户

安装 laravel-echo-server 订阅 Redis Sub

如果使用 pusher 那么直接使只用 laravel 就可以了,如果使用 Redis + socket.io 则需要使用开源项目 laravel-echo-server 。所以我们现在要使用 laravel-echo-server

全局安装

npm install -g laravel-echo-server
登录后复制

初始化 laravel-echo-server

laravel-echo-server init

// 是否在开发模式下运行此服务器(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)// 想用的数据库  选择 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)// 选择 网络协议 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

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!
登录后复制

测试广播

在浏览器上执行 http://yourhost/api/ship?id=16

Channel: laravel_database_orderStatus
Event: anyName
登录后复制
  • laravel-echo-server 连接成功!

安装 laravel-echo 的前依赖

由于前端使用的是 laravel-echo来收听广播,我们选择的底层实现方式是socket.io。所以首先我们要在package.json中添加 laravel-echosocket.io的依赖

npm i --save socket.io-client
npm i --save laravel-echo
登录后复制

编辑 resource/js/bootstrap.js 添加如下代码

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 内容为

<!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); // 收到消息进行的操作,参数 e 为所携带的数据
    });
    </script>
</body>

</html>
登录后复制

js 代码的意思是收听 news 通道内的 News 事件对象,将接收到的事件在控制台打印出来。

基本构建

npm install && npm run watch
登录后复制

相关推荐:最新的五个Laravel视频教程

以上是聊聊laravel7.0的广播机制,总有你想要的!的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用Laravel的组件来创建可重复使用的UI元素? 如何使用Laravel的组件来创建可重复使用的UI元素? Mar 17, 2025 pm 02:47 PM

本文讨论了使用组件在Laravel中创建和自定义可重复使用的UI元素,从而为组织提供最佳实践并建议增强包装。

在云原生环境中使用Laravel的最佳实践是什么? 在云原生环境中使用Laravel的最佳实践是什么? Mar 14, 2025 pm 01:44 PM

本文讨论了在云本地环境中部署Laravel的最佳实践,重点是可扩展性,可靠性和安全性。关键问题包括容器化,微服务,无状态设计和优化策略。

如何在Laravel中创建和使用自定义刀片指令? 如何在Laravel中创建和使用自定义刀片指令? Mar 17, 2025 pm 02:50 PM

本文讨论了Laravel中的创建和使用自定义刀片指令以增强模板。它涵盖了定义指令,在模板中使用它们,并在大型项目中管理它们,强调了改进的代码可重复性和R等好处

如何在Laravel中创建和使用自定义验证规则? 如何在Laravel中创建和使用自定义验证规则? Mar 17, 2025 pm 02:38 PM

本文讨论了Laravel中的创建和使用自定义验证规则,提供了定义和实施的步骤。它突出了诸如可重复性和特异性之类的好处,并提供了扩展Laravel验证系统的方法。

如何使用Laravel的工匠控制台自动执行常见任务? 如何使用Laravel的工匠控制台自动执行常见任务? Mar 17, 2025 pm 02:39 PM

Laravel的工匠控制台可以自动化任务,例如生成代码,运行迁移和调度。关键命令包括:​​控制器,迁移和DB:种子。可以为特定需求创建自定义命令,增强工作流效率。

如何使用Laravel的路由功能来创建SEO友好的URL? 如何使用Laravel的路由功能来创建SEO友好的URL? Mar 17, 2025 pm 02:43 PM

文章讨论了使用Laravel的路由来创建SEO友好的URL,涵盖最佳实践,规范的URL和SEO优化工具。WordCount:159

django或laravel哪个更好? django或laravel哪个更好? Mar 28, 2025 am 10:41 AM

Django和Laravel都是全栈框架,Django适合Python开发者和复杂业务逻辑,Laravel适合PHP开发者和优雅语法。1.Django基于Python,遵循“电池齐全”哲学,适合快速开发和高并发。2.Laravel基于PHP,强调开发者体验,适合小型到中型项目。

Laravel与其他PHP框架(Symfony,Codeigniter,YII)相比如何? Laravel与其他PHP框架(Symfony,Codeigniter,YII)相比如何? Mar 14, 2025 pm 01:49 PM

Laravel以其优雅的语法而闻名,与Symfony,Codeigniter和Yii进行了比较。它提供了更柔和的学习曲线和独特的功能,例如雄辩的Orm和Artisan Cli,可以使易于使用的易用性与强大的功能。

See all articles