laravel广播系统
环境:
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’));可看到如下图