Laravel Broadcasting广播机制(Redis + socket.io)-学习实例

本文介绍了如何在Laravel 5.6项目中使用Redis和socket.io实现广播机制,通过laravel-echo-server订阅Redis频道,实现实时新闻推送。详细步骤包括设置广播服务、配置Redis、创建Event、启动laravel-echo-server,以及前端laravel-echo的安装和页面集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

借助Laravel Broadcasting你可以使用上时下很热的Websocket技术。

注意:请务必使用较新版本的 Laravel。Laravel在最近几个版本进行过比较大的重构,比如路由从 app\Http\routes.php 拆分为到 routes 目录下的多个文件,包括广播在内的各个附加组件也都进行了重构并正式写入文档。所以网上有些教程(特别是入门教程)可能是根据旧版本来写的,容易让你迷惑。当安装完Laravel后执行以下命令查看Laravel版本

php artisan --version

如果低于 5.4 请重新建立新版本的Laravel,具体方法在下面会详细讲解。


实例背景:

假设场景:

假设我们要使用laravel作为服务端做一个新闻推送系统。用户打开页面后不需要刷新页面即可不断的获取到最新的新闻。

环境参数

  • Homestead 7.4.2
  • Laravel 5.6.23 (广播机制在 5.4 以后进行了一次重构,并正式加入文档,所以请务必使用 5.4 及其以上版本)
  • PHP 7.1
  • Redis 4.0.9 (Homestead 自带redis)

建立基本项目框架

使用laravel new 来建立 quickstart 项目

laravel new quickstart

我安装完后的laravel版本为5.6.23

$ php artisan --version
Laravel Framework version 5.6.23

编辑 .env 文件,修改 APP_URL=http://quickstart

APP_URL=http://quickstart

我们还需要做3件事情才能让quickstart成功的被部署:

1. 在 hosts 文件中增加 quickstart 到 192.168.10.10 (vagrant地址)的域名解析

192.168.10.10   quickstart

2. 编辑Homestead.yaml增加 quickstart 这个网站

    - map: quickstart
      to: /home/vagrant/Code/quickstart/public
      php: "7.1"

3 reload  vagrant 虚拟机

cd ~/Homestead
vagrant reload --provision

最后,打开浏览器访问 http://quickstart 你将会看到如下页面


说明项目搭建成功。接下来我们在这个quickstart的基础上为项目添加广播机制。

广播架构

目前有两种广播机制可选:

  • pusher:laravel自带方案,但是有使用限制,需要收费
  • Redis + socket.io:无限制
我们使用业界较流行的Redis + socket.io 方案 。

接下来你会信息爆炸似的接收到好几个新名词:

  • laravel-echo-server:使用 socket.io 机制实现的 broadcasting 服务端
  • laravel-echo:laravel-echo是 laravel broadcasting 的客户端。注意,laravel-echo 并不是 laravel-echo-server 专属的客户端, laravel-echo 有两种连接机制可以选:pusher 和 socket.io 。 而 laravel-echo-server 是开发出来专门用于 socket.io连接的服务端。如果你使用的是 pusher,那么不需要使用 laravel-echo-server ,但是你依然要使用 laravel-echo
  • Socket.IO:websocket 的一种nodejs实现。laravel-echo 如果要使用socket.io 则需要先安装 socket.io-client。
  • Predis:redis客户端的php实现,如果要使用redis作为广播机制的实现,则需要先安装 predis
  • Laravel Event:广播事件类
  • Laravel Queue:广播机制是基于queue机制来实现的
  • Redis Sub/Pub:Redis的订阅机制。laravel-echo-server本质上只是一个Redis订阅服务的订阅者。

这几样东西配合起来的架构图如下


根据这幅图我们可以知道事件的广播机制流程:

  1. Laravel 通过 broadcasting 机制发布一个Event对象到Redis
  2. Laravel Queue Worker 读取该Event对象,并使用Redis的Sub/Pub机制将该 Event对象发布出去
  3. laravel-echo-server  通过 Redis 的 Sub/Pub机制收听到该 Event
  4. 由于 laravel-echo 使用 socket.io 跟 laravel-echo-server相连接。所以 laravel-echo 会通过socket.io将Event对象发送给laravel-echo
  5. laravel-echo解析通过 socket.io接收到的 Event对象

广播事件种类:

  • public:谁都可以收听的广播
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值