首页 > 其他分享 >29. Laravel 广播系统补充

29. Laravel 广播系统补充

时间:2023-02-28 13:56:57浏览次数:64  
标签:Laravel ... console log 29 Echo window user 广播系统

Laravel 广播系统补充

配套视频地址:https://www.bilibili.com/video/av80196918?p=2

设置广播名称

// 默认是事件的类名
public function broadcastAs()
{
    return 'server.created';
}

//     .listen('.server.created', (e) => {
//         console.log(e);
//     });

增加广播数据

// 默认只包含 public 属性
public function broadcastWith()
{
    return ['id' => $this->user->id];
}

自定义授权端点

// 默认 broadcasting/auth
window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
    authEndpoint: '/custom/endpoint/auth'
});

定义频道授权

Broadcast::channel('channel', function() {
    // ...
}, ['guards' => ['web', 'admin']]);

定义频道类

php artisan make:channel OrderChannel
use App\Broadcasting\OrderChannel;

Broadcast::channel('order.{order}', OrderChannel::class);
<?php

namespace App\Broadcasting;

use App\Order;
use App\User;

class OrderChannel
{
    /**
     * Create a new channel instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Authenticate the user's access to the channel.
     *
     * @param  \App\User  $user
     * @param  \App\Order  $order
     * @return array|bool
     */
    public function join(User $user, Order $order)
    {
        return $user->id === $order->user_id;
    }
}

获取当前连接的 socketId

var socketId = Echo.socketId();

监听多个事件

Echo.private('orders')
    .listen(...)
    .listen(...)
    .listen(...);

退出频道

在 Echo 实例上调用 leaveChannel 方法,可以退出公有频道:

Echo.leaveChannel('orders');

调用 leave 方法,可以退出公有频道、私有频道和在线频道:

Echo.leave('orders');

定制命名空间

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
    namespace: 'App.Other.Namespace'    // 默认 App\Events
});

客户端事件

<!doctype html>
<html lang="en">
<head>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <script src="/js/app.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var roomId = "{{ $roomId }}";
        window.Echo.join(`chat.${roomId}`)
            .here((users) => {
                console.log(users);
            })
            .joining((user) => {
                console.log(user.name + ' 来了');
            })
            .leaving((user) => {
                console.log(user.name + ' 走了');
            })
            .listen('NewMessage', (e) => {
                console.log(e.user.name + ":" + e.msg);
            });

        Echo.private('chat')
            .listenForWhisper('typing', (e) => {
                console.log('typing...');
                console.log(e);
            });
    </script>

</head>
<body>
<div id="app">
    <input type="text" id="msg" v-model="msg">

    <button onclick="axios.get('/room/{{ $roomId }}/'+document.getElementById('msg').value)">发送</button>
</div>


</body>
<script>
    new Vue({
        el: '#app',
        data() {
            return {
                msg: ''
            }
        },
        watch: {
            msg(value) {
                Echo.private('chat')
                    .whisper('typing', {
                        roomId: roomId
                    });
            }
        }
    })
</script>
</html>
Broadcast::channel('chat', function () {
    return true;
});

标签:Laravel,...,console,log,29,Echo,window,user,广播系统
From: https://www.cnblogs.com/fuqian/p/17163958.html

相关文章

  • Laravel 最佳实践
    Laravel最佳实践翻译来源:https://github.com/alexeymezenin/laravel-best-practices单一职责原则不要这样做:publicfunctiongetFullNameAttribute(){if(aut......
  • Laravel 核心概念
    Laravel核心概念配套视频地址:https://www.bilibili.com/video/av76060293核心概念简介、服务容器、服务提供者、facade、contract、生命周期。简介我叫Laravel。......
  • 18. Laravel 模型关系:远程一对一
    Laravel模型关系:远程一对一配套视频地址:https://www.bilibili.com/video/av73028135?p=5一个帖子属于一个作者,该作者就读一所学校。帖子可通过作者访问作者所在的学校......
  • 17. Laravel 模型关系:多对多
    Laravel模型关系:多对多配套视频地址:https://www.bilibili.com/video/av73028135?p=4多对多:一个人可以扮演多个角色,一个角色可以被多个人扮演。数据结构#users:id,......
  • 19. Laravel 模型关系:远程一对多
    Laravel模型关系:远程一对多配套视频地址:https://www.bilibili.com/video/av73028135?p=5简单的说:Thread模型可以通过Author模型访问多个的Book模型。表threads......
  • 8. Laravel 视图
    Laravel视图配套视频地址https://www.bilibili.com/video/av70545323?p=8知识点返回视图给视图传递数据模版语法1.返回视图//resources/views/test.blade.p......
  • 7. Laravel 中间件
    Laravel中间件配套视频教程:https://www.bilibili.com/video/av83019817作用过滤http请求。生成中间件的命令phpartisanmake:middlewareShowAge前置与后置中......
  • 9. Laravel 内置 web 认证
    Laravel内置web认证配套视频地址:https://www.bilibili.com/video/av74879198/原理注册:用户注册成功后。在服务器端生成session文件。给用户传递session(文件名......
  • 10. Laravel api 认证
    Laravelapi认证配套视频地址:https://www.bilibili.com/video/av74879198?p=3原理注册:用户注册成功后,随机生成长字符串作为token,原生token返回给用户。哈希后的......
  • 12. Laravel Passport 授权码模式
    LaravelPassport授权码模式配套视频地址:https://www.bilibili.com/video/av74879198?p=7哔哩哔哩提供一个“微信登陆”的链接,用户点击跳转到微信授权服务器。用户......