laravel 广播

栏目: 编程语言 · PHP · 发布时间: 5年前

内容简介:广播系统的目的是用于实现当服务端完成某种特定功能后向客户端推送消息的功能,比如服务器处理完成某项工作后向客户端发送结果广播流程图

laravel广播

广播系统的目的是用于实现当服务端完成某种特定功能后向客户端推送消息的功能,比如服务器处理完成某项工作后向客户端发送结果

广播流程图

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 广播

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 订阅事件的时候为事件类加上 . 前缀。需要填写完全限定名称的类名。

参考资料


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

我++

我++

威廉·J·米切尔 / 刘小虎等 / 中国建筑工业出版社 / 2006-6 / 50.00元

随着《我++——电子自我和互联城市》(Me++:The Cyborg Self And The Networked City)的出版,《比特之城》(City Of Bits)和《E-托邦》(E-topia)的作者完成了一套检验信息技术在日常生活中之衍生的非正式三部曲。威廉·J·米切尔描述了自马可尼以后的百年间无线技术的发展变化:网络的不断扩大,发送和接受装置的不断缩小。正如他所说,这就像“大人国重......一起来看看 《我++》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具