内容简介:广播系统的目的是用于实现当服务端完成某种特定功能后向客户端推送消息的功能,比如服务器处理完成某项工作后向客户端发送结果广播流程图
laravel广播
广播系统的目的是用于实现当服务端完成某种特定功能后向客户端推送消息的功能,比如服务器处理完成某项工作后向客户端发送结果
广播流程图
Socket.IO 服务
第三方服务 laravel-echo-server
1、全局安装socket
npm install -g laravel-echo-server
2、配置laravel-echo-server.json
laravel-echo-server init
配置
{ "authHost": "http://localhost", "authEndpoint": "/broadcasting/auth", "clients": [ { "appId": "7c4d46b3224252d1", "key": "d5facfd856868864f68f8f923f7b2212" } ], "database": "redis", "databaseConfig": { "redis": { "port": "6379", "host": "127.0.0.1", "db": 1 }, "sqlite": { "databasePath": "/database/laravel-echo-server.sqlite" } }, "devMode": true, "host": null, "port": "6001", "protocol": "http", "socketio": {}, "sslCertPath": "", "sslKeyPath": "", "sslCertChainPath": "", "sslPassphrase": "", "subscribers": { "http": true, "redis": true }, "apiOriginAllow": { "allowCors": true, "allowOrigin": "http://localhost:80", "allowMethods": "GET, POST", "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id" } }
3、启动socket服务
laravel-echo-server start
订阅方式有 Redis 、Http、Pusher,laravel事件使用的是Redis。
4、模拟一个post请求发送json
http://localhost:6001/apps/7c4d46b3224252d1/events?auth_key=d5facfd856868864f68f8f923f7b2212
{ "channel": "publish", "name": "sendPublish", "data": { "status": 200, "message": "发布成功" } }
laravel广播事件
.env 配置
BROADCAST_DRIVER=redis
config/app.php的BroadcastServiceProvider的注释去掉,注册广播授权路由和回调
App\Providers\BroadcastServiceProvider::class,
广播配置config/broadcasting.php
新增一个广播事件
<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class PublishEvent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $data; public $broadcastQueue = 'publish'; /** * Create a new event instance. * * @return void */ public function __construct($data = '') { $this->data = $data; } /** * Get the channels the event should broadcast on. * * @return Channel|array */ public function broadcastOn() { return new Channel('publish'); } /** * 事件的广播名称。 * * @return string */ public function broadcastAs() { return 'sendPublish'; } public function broadcastWith() { return [ 'data' => $this->data, 'time' => time() ]; } }
没有定义broadcastAs方法,会获取类名作为事件name
$name = method_exists($this->event, 'broadcastAs') ? $this->event->broadcastAs() : get_class($this->event);
启动事件队列服务,配置public $broadcastQueue = ‘publish’; 指定队列
php artisan queue:work redis --queue=publish --sleep=3 --timeout=180
调用广播事件进行广播
$data = [ 'msg' => '发布成功' ]; event(new \App\Events\PublishEvent($data));
客户端
使用 vue-echo
main.js
import io from 'socket.io-client'; import VueEcho from 'vue-echo'; window.io = io; Vue.use(VueEcho, { broadcaster: 'socket.io', host: window.location.hostname + ':6001' });
client.js 在可以监听channel
mounted() { this.$echo.channel('publish').listen('.sendPublish', (res) => { console.log(res); }); },
在使用 Echo 订阅事件的时候为事件类加上 .
前缀。需要填写完全限定名称的类名。
参考资料
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
从需求到产品:0岁产品经理进阶之道
权莉 / 人民邮电出版社 / 2018-7 / 49.80元
本书主要针对刚入职的初级产品经理,从贴近工作状态的场景切入,对各阶段的知识点进行分类总结,旨在提供一套经过实践检验的产品方法论,为读者从初级产品经理成长为产品经理奠定坚实的基础。 书中提炼的方法和案例涵盖初级产品经理工作的方方面面,从基本技能到思维方式,从需求管理到产品规划定义,从框架选型到流程梳理,从工作模块拆解到案例剖析,用具体且贴合实际工作场景的内容,还原真实的产品工作方法及实践案例,既有方......一起来看看 《从需求到产品:0岁产品经理进阶之道》 这本书的介绍吧!