laravel 广播

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

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

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

参考资料


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

查看所有标签

猜你喜欢:

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

Programming Amazon Web Services

Programming Amazon Web Services

James Murty / O'Reilly Media / 2008-3-25 / USD 49.99

Building on the success of its storefront and fulfillment services, Amazon now allows businesses to "rent" computing power, data storage and bandwidth on its vast network platform. This book demonstra......一起来看看 《Programming Amazon Web Services》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具