laravel搭建基于websocket的实时⼴播通知系统laravel搭建基于websocket的实时⼴播通知系统
流程原理
laravel⽀持事件和队列机制,可以触发⼀个⼴播事件。
利⽤redis的发布订阅特性,将事件发布到redis。
利⽤laravle-echo-server订阅事件获取通知。
通过websocket发送到浏览器客户端。
安装使⽤laravle-echo-server
安装:
npm install -g laravel-echo-server
配置:
laravel-echo-server init
启动:
laravel-echo-server start
配置⼴播
修改env⽂件:
BROADCAST_DRIVER=redis
注意redis的配置,在config/database.php中,其prefix会加到channel的前⾯。
如果使⽤默认,就需要在频道前加上prefix的值:laravel_database_
打开config/app.php中App\Providers\BroadcastServiceProvider::class的注释
php artisan make:event XxxxYy 创建⼀个⼴播事件并实现ShouldBroadcast接⼝
在其broadcastOn中定义⼴播的通道,可以为私有通道,现场通道(类似聊天室)
默认的队列驱动sync,表⽰实时的队列,也是可⾏的,⽽且⽆需启动队列。
配置客户端
安装laravel-echo
npm install laravel-echo --save
引⼊socket.io,这是⼀个websocket的前端js库
<script src="cdn.bootcdn/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
websocket和socket配置laravle-echo并在上⾯的频道上监听相关的事件:
import Echo from 'laravel-echo';
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});
echo.channel('orders')
.listen('OrderShipped', (e) => {
console.der.name);
});
触发事件
broadcast(new OrderShipped($order));
授权路由
⽤于限定只有登录⼈能够订阅私有频道
Broadcast::channel('order.{orderId}', function ($user, $orderId) { return $user->id === Order::findOrNew($orderId)->user_id; });
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论