【问题标题】:Laravel Echo with Pusher for multiple usersLaravel Echo 与 Pusher 支持多个用户
【发布时间】:2021-06-24 10:19:11
【问题描述】:

我正在构建一个可以让用户接受会议请求的应用。一个用户可以有多个日历,用于他们必须管理的不同位置。此外,可以随时添加与用户关联的新日历。

我没有看到用户如何订阅任意数量的频道 - 似乎您必须为要监控的任何频道和事件创建显式客户端侦听器:

public function getListeners()
{
    return [
        "echo-private:calendars.{$this->calendarId}, CalendarEventCreated" => 'notifyNewCalendarEvent',
    ];
} 

由于每个日历有多种事件类型(例如,CalendarEventCreatedCalendarEventRejectedCalendarEventUpdated),并且每个用户可能有几十个日历,如何构建这样的结构,而不是为每个用户运行数百个侦听器?

【问题讨论】:

    标签: php laravel pusher laravel-echo


    【解决方案1】:

    一种解决方案是直接在 user_id 上广播数据,提供日历 id 和事件信息。但这仅适用于日历所有者,否则您需要单独向所有具有日历查看权限的用户广播。

    另一种解决方案是坚持您的描述。听 100 个事件真的有问题吗?最后,您将只打开十几个需要在服务器端进行身份验证的通道,并且只打开 1 个 websocket 连接。一旦在频道上通过身份验证,无论您是否在收听消息,您都会收到消息。

    诀窍是使您的前端代码尽可能干净和干燥。我个人经常使用 Vue、Vuex 和 vuex-orm,其中 orm 反映了我在后端拥有的数据结构。将数据插入前端 orm 时,会在我的 webhook 逻辑中运行回调。删除数据后,会在我离开频道等的地方运行回调。

    【讨论】:

      【解决方案2】:

      您可以将CalendarEventCreatedCalendarEventRejectedCalendarEventUpdated 合并为CalendarEvent,然后提供事件类型和有效负载。基本上每个用户可以使用一个频道,或者每个日历可以使用一个频道;确保调度和侦听完全不同,但总体上没有更多或更少的事件/侦听器(假设两种方法同样有效)。

      【讨论】:

        猜你喜欢
        • 2020-06-14
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-15
        • 2021-04-27
        相关资源
        最近更新 更多