广播管理类,间接触发事件,放入队列
$manager = app(Illuminate\Broadcasting\BroadcastManager::class); $manager->queue(new Illuminate\Auth\Events\Login($user, true));
Pusher驱动
Pusher是一个第三方服务,服务器发送广播时,会向Pusher发送请求,再通过Pusher与浏览器或移动端保持的长连接进行数据交互;
配置
通过Pusher官网注册用户信息,获取属于自已的一套密钥信息,修改.env的配置文件;
BROADCAST_DRIVER=pusher PUSHER_APP_ID=xxxxxxxxxxxxxxxxxxxxxx PUSHER_APP_KEY=xxxxxxxxxxxxxxxxxxxxxx PUSHER_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxx
准备工作
事件监听
后台的事件监听还是采用"日志驱动"部分的登录例子;
前端
前端页面引入以下代码:
<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-开头),则会发出权限检查请求;对应的后端需要定义私有频道和存在频道的权限;
频道权限定义
频道的权限定义是在routes/channels.php里;此处笔者为first-channel频道定义权限回调函数:
Broadcast::channel('first-channel', function ($user) {
return (int) $user->id === 1;
});
有读者会疑问,前端页面订阅的频道不是private-first-channel吗?怎么后端只定义first-channel频道的权限呢?那是因为,后端定义的频道假设是A,那么在Pusher及浏览器端或移动端传递的私有频道名为private-A,存在频道则会是presence-A;
广播
直接广播
$manager = app(Illuminate\Broadcasting\BroadcastManager::class); $driver = $manager->connection(); // socket 参数是广播私有频道时排除的 socket, 每个浏览器端或者移动端在建立 websocket 时都会被分配一个 socket_id $driver->broadcast(['private-first-channel'], 'login', ['user' => ['name' => 'hello'], 'socket' => '5395.4377611']);
间接广播
参考“日志驱动”提及的间接广播方式;
如果要发送排我广播(也就是除了当前请求的这个客户端不收到广播消息),则需要以下条件:
Redis驱动
配置
.env文件修改或添加一行:BROADCAST_DRIVER=redis;
广播
原理是同样在后端部署一个Socket.IO服务器,Laravel框架会发布消息到Socket.IO服务器上,由Socket.IO服务器同浏览器端或者移动端保持长连接;
这部分笔者尚未demo,网上入门资料还是挺多的,知道原理,这部分动作上手就容易多了;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
附录
同类型的文章可参考以下,加深了解:
laravel ORM 只开启created_at的几种方法总结下面小编就为大家分享一篇laravel ORM 只开启created_at的几种方法总结,具有很好的参考价值,希望对大家有所帮助。一
通过源码解析Laravel的依赖注入这篇文章主要给大家介绍了如何通过源码解析Laravel的依赖注入的相关资料,文中通过示例代码介绍的非常详细,对大
Laravel中unique和exists验证规则的优化详解这篇文章主要给大家介绍了关于Laravel中unique和exists验证规则的优化的相关资料,文中通过示例代码介绍的非常详细,
Laravel 5.5基于内置的Auth模块实现前后台登陆详解最近在使用laravel5.5,利用其实现了一个功能,下面分享给大家,这篇文章主要给大家介绍了关于Laravel 5.5基于内置的
源码分析 Laravel 重复执行同一个队列任务的原因laravel 的队列服务对各种不同的后台队列服务提供了统一的 API,下面这篇文章通过源码分析给大家介绍了关于 Larave
关于 Laravel Redis 多个进程同时取队列问题详解这篇文章主要给大家介绍了关于 Laravel Redis 多个进程同时取队列问题的相关资料,文中通过示例代码介绍的非常详细