加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Laravel学习教程之广播模块详解

发布时间:2020-12-14 19:55:08 所属栏目:大数据 来源:网络整理
导读:《Laravel学习教程之广播模块详解》要点: 本文介绍了Laravel学习教程之广播模块详解,希望对您有用。如果有疑问,可以联系我们。 前言 PHP实战 本文主要给大家介绍了关于Laravel广播模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的

《Laravel学习教程之广播模块详解》要点:
本文介绍了Laravel学习教程之广播模块详解,希望对您有用。如果有疑问,可以联系我们。

前言PHP实战

本文主要给大家介绍了关于Laravel广播模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:PHP实战

注意:本文是基于Laravel 5.4版本的路由模块代码进行分析书写;PHP实战

简介
PHP实战

广播是指发送方发送一条消息,订阅频道的各个接收方都能及时收到消息;比如 A同学写了一篇文章,这时候 B同学在文章底下评论了,A同学在页面上是不用刷新就能收到提示有文章被评论了,这个本质上就是A同学收到了广播消息,这个广播消息是由B同学评论这个动作触发了发送广播消息;PHP实战

在整个广播行为中,有一个重要的概念叫频道channel,频道的类型有PHP实战

  • 公共频道public
  • 私有频道private
  • 存在频道presence

移动端订阅了公共频道public,会直接提示成功;私有频道private和存在频道presence在进行订阅的过程中,会向服务器端发送权限验证,看是不是有权限可以订阅该频道;私有频道private和存在频道presence的区别在于,私有频道private能够接收其他成员发送的消息,而存在频道presence除此之外,还能够在用户的加入与离开时接收信息;PHP实战

广播适合以下场景:PHP实战

  • 通知(Notification) 或 信号(Signal)
  • 通知是最简单的示例,也最经常用到.信号也可看作是通知的一种展现形式,只不过信号没有UI而已.
  • Activity Streams
  • Activity Streams(feeds)是社交网络的核心.如微信朋友圈的点赞和评论,A可以实时看到B的点赞,B可以实时看到A的评论.
  • 聊天
  • 聊天信息的实时显示

模块组成PHP实战


PHP实战

Demo
PHP实战

日志驱动
PHP实战

配置
PHP实战

.env文件修改或添加一行:BROADCAST_DRIVER=log;PHP实战

广播
PHP实战

直接调用PHP实战

 $manager = app(IlluminateBroadcastingBroadcastManager::class);
 $driver = $manager->connection();
 // 第一个参数是频道名,第二个参数是事件名,第三个参数是广播内容
 $driver->broadcast(['channel_1','channel_2'],'login',['message' => 'hello world']);

因为是日志驱动,所以广播内容会写到框架配置的日志文件中,输出消息如下所示PHP实战

[2017-08-18 20:45:49] local.INFO: Broadcasting [login] on channels [channel_1,channel_2] with payload:
{
 "message": "hello world"
} 

监听事件广播
PHP实战

这种调用方式,是当实现ShouldBroadcast接口的事件被触发时,则会进行广播操作;(同时,还有一个接口叫ShouldBroadcastNow,与ShouldBroadcast接口的不同在于,将实现ShouldBroadcastNow接口的事件放入队列中时,会被放入叫sync的队列中)PHP实战

举个例子,PHP实战

第一步,IlluminateAuthEventsLogin事件是用户登录成功后会触发的事件,略作改动,让其实现广播功能;PHP实战

class Login implements ShouldBroadcast {
 ......
 
 // 定义事件被触发时,广播频道;此处定义名为 first-channel 的私有频道
 public function broadcastOn() {
  return [
   new PrivateChannel('first-channel'),];
 }
 
 // 自定义广播名称;如果方法未定义,默认以类名为事件名,此处的默认值是 IlluminateAuthEventsLogin
 public function broadcastAs() {
  return 'login';
 }
}

第二步,注册事件监听;在app/Providers/EventServiceProvider.php中修改:PHP实战

protected $listen = [
 ......
 'IlluminateAuthEventsLogin' => [
  'AppListenersUserLogin',],];

文件app/Listeners/UserLogin.php粗糙地实现了一下:PHP实战

class UserLogin {
 public function __construct() {}
 
 public function handle(Login $event){
  Log::info('Do UserLogin Listener: I was Login');
 }
}

第三步,触发事件,发送广播;有好几种触发广播方式:PHP实战

直接事件触发
PHP实战

event(new IlluminateAuthEventsLogin($user,true));

帮助函数broadcast,间接触发事件
PHP实战

broadcast(new IlluminateAuthEventsLogin($user,true));

广播管理类,间接触发事件,直接广播
PHP实战

$manager = app(IlluminateBroadcastingBroadcastManager::class);
$manager->event(new IlluminateAuthEventsLogin($user,放入队列
PHP实战

$manager = app(IlluminateBroadcastingBroadcastManager::class);
$manager->queue(new IlluminateAuthEventsLogin($user,true));

Pusher驱动
PHP实战

Pusher是一个第三方服务,服务器发送广播时,会向Pusher发送请求,再通过Pusher与浏览器或移动端保持的长连接进行数据交互;PHP实战

配置
PHP实战

通过Pusher官网注册用户信息,获取属于自已的一套密钥信息,修改.env的配置文件;PHP实战

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=xxxxxxxxxxxxxxxxxxxxxx
PUSHER_APP_KEY=xxxxxxxxxxxxxxxxxxxxxx
PUSHER_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxx

准备工作
PHP实战

事件监听PHP实战

后台的事件监听还是采用"日志驱动"部分的登录例子;PHP实战

前端PHP实战

前端页面引入以下代码:PHP实战

<script src="https://js.pusher.com/4.1/pusher.min.js"></script>
<script>
// 打开 Pusher 的调试日志
Pusher.logToConsole = true;
// 定义 Pusher 变量
var pusher = new Pusher('PUSHER_APP_KEY的值',{
 cluster: 'ap1',encrypted: true
});
// 定义频道,绑定事件
var channel = pusher.subscribe('private-first-channel');
channel.bind('login',function(data) {
 alert(data);
});
</script>

如果订阅的是公共频道,则不会向服务器端请求权限检查;如果是私有频道(频道名是以private-开头)或存在频道(频道名是以presence-开头),则会发出权限检查请求;对应的后端需要定义私有频道和存在频道的权限;PHP实战

频道权限定义PHP实战

频道的权限定义是在routes/channels.php里;此处笔者为first-channel频道定义权限回调函数:PHP实战

Broadcast::channel('first-channel',function ($user) {
  return (int) $user->id === 1;
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读