laravel6 基于 Redis 实现广播系统上(公共频道)

27 篇文章 0 订阅

环境:

win7
redis 3.0.5.4
laravle 6
node.js v12.16.2
“predis/predis”: “^1.1”

配置

1.在config\app.php文件中取消注释 App\Providers\BroadcastServiceProvider::class,

修改.env文件

BROADCAST_DRIVER=redis

2.安装laravel-echo和laravel-echo-server

npm install --save socket.io-client    //安装websocket客户端
npm install --save laravel-echo     //安装websocket客户端封装
npm install -g laravel-echo-server  //安装websocket服务端
npm install               //安装所有依赖
npm run watch     //监听前端资源文件变化 

laravel-echo-server init  
初始化websocket服务端

在这里插入图片描述

启动websocket服务端
laravel-echo-server start 

在这里插入图片描述
注:下次启动直接执行如下代码即可

npm run watch
laravel-echo-server start 

共有频道

生成事件

php artisan make:event PublicMsgEvent


代码如下:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;


class PublicMsgEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $msg;

    /**
     * PublicMsgEvent constructor.
     * @param $msg
     */
    public function __construct($msg)
    {
        //
        $this->msg =$msg;

    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('public-msg-event');//public-msg-event为你要设定的监听的名称
    }
}

修改resource/bootstrap.js代码如下
import Echo from "laravel-echo"

window.io = require('socket.io-client');

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
});

window.Echo.channel('laravel_database_public-msg-event')
    //laravel_database_public-msg-event就是我们监听到的名字
    .listen('PublicMsgEvent', (e) => {  //PublicMsgEvent就是之前生成的文件
        var msg =e.msg;
        console.log(msg);
    });

前端文件引用app.js(app.js内容包含bootstrap.js),修改resource/view/welcome.blade.php,增加如下代码
<script src="{{asset('js/app.js')}}"></script>
分发共有频道事件消息

修改routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Events\PublicMsgEvent;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/PushMsgEvent', function () {
    event(new PublicMsgEvent('PublicMsgEvent'));
});

浏览器分别打开

http://laraveldemo.com/

http://laraveldemo.com/PushMsgEvent 是触发消息
多次访问http://laraveldemo.com/PushMsgEvent
修改event(new PublicMsgEvent(‘PublicMsgEve1111nt’));可看到如下图
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值