laravel 5.6
laravel-echo 这个是个大家伙
这东西 文档看不彻底 是没办法操作的
先是
- node
- redis
再是
- 队列
- 事件系统
- 广播系统
还有
- laravel-echo-server
- laravel-echo
- socket.io-client
然后就 敬请的踩坑吧
他们三者之间的关系
我理解的是 先是触发事件 -> 事件到队列后 -> 在由广播给通知出来
关于 这个家伙
然后 在 laravel
中的 broadcasting (广播系统)
主要是 服务端
给 客户端
推送消息的
然后在 这个 广播系统
中有三种 广播类型
这个区别
Channel
公开 所有人不用订阅就可以访问
Private
and
Presence
这两个 必须在用户登录后才可以订阅
这个区别 后者是好像是 可以监听到 来者的 here
joining
leaving
这几个事件
对于这个 先是定义一个事件
php artisan make:event
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
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 Rss implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels;
public function __construct() { }
public function broadcastOn() {
return new Channel('read'); return new PrivateChannel('read'); return new PresenceChannel('read'); }
public function broadcastWith() { return ['name' => \Carbon\Carbon::now()->toDateTimeString()]; } }
|
对于 PrivateChannel
和 PresenceChannel
这种类型的
则需要进行授权访问
先去 config\app.php
中
取消
注释 App\Providers\BroadcastServiceProvider::class,
因为 那是我们授权的路由
php artisan make:channel Ordel
这条命令主要是防止 路由 文件肿大 是 laravel 5.6
新增功能
再到 routes\channels.php
中注册一个验证授权的路由
1 2 3 4 5 6 7 8 9 10
|
Broadcast::channel('read', Ordel::class);
Broadcast::channel('read', function () { return true; });
|
然后 具体的 看 https://laravel.com/docs/5.6/notifications
关于 使用 laravel-echo-server
laravel-echo-server init
运行后 按照那提示来
运行后 会在 项目根目录生成一个 laravel-echo-server.json
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| { "authHost": "网站地址 同 .env APP_URL", "authEndpoint": "/broadcasting/auth",
"clients": [ { "appId": "APP_ID", "key": "79329842613b84ecca054c3a7afa3c63" } ], "database": "redis", "databaseConfig": { "redis": { "password": "root" }, "sqlite": { "databasePath": "/database/laravel-echo-server.sqlite" } }, "devMode": false, "host": null, "port": "6001", "protocol": "http", "socketio": {}, "sslCertPath": "", "sslKeyPath": "", "sslCertChainPath": "", "sslPassphrase": "", "apiOriginAllow": { "allowCors": false, "allowOrigin": "", "allowMethods": "", "allowHeaders": "" } }
|
使用 laravel-echo-server start
来运行此服务
关于 使用 laravel-echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import Echo from 'laravel-echo'
window.io = require('socket.io-client')
window.Echo = new Echo({ broadcaster: 'socket.io', host: window.location.hostname + ':6001' });
Echo.channel('read')
Echo.private('read')
.listen('Rss', (e) => { console.log(e) })
.here((e) => {
}) .joining((e) => {
}) .leaving((e) => {
})
.join('频道名')
.leave('频道名')
|
关于推送一个广播
1
| event(new App\Events\Rss());
|
最后 别忘记了 运行队列
end
大概就酱 想到再补充