如何解决Laravel Echo with Pusher 适用于多个用户
我正在构建一个允许用户接受会议请求的应用。一个用户可以有多个日历,用于他们必须管理的不同位置。此外,可以随时添加与用户关联的新日历。
我没有看到用户如何订阅任意数量的频道——似乎您必须为要监控的任何频道和事件创建一个显式的客户端侦听器:
public function getListeners()
{
return [
"echo-private:calendars.{$this->calendarId},CalendarEventCreated" => 'notifyNewCalendarEvent',];
}
由于每个日历有多种事件类型(例如 CalendarEventCreated
、CalendarEventRejected
、CalendarEventUpdated
),并且每个用户可能有几十个日历,因此如何进行结构化以使其不存在数百个为每个用户运行的侦听器?
解决方法
一种解决方案是直接在 user_id 上广播数据,提供日历 id 和事件信息。但这仅适用于日历所有者,否则您需要单独向所有具有日历查看权限的用户广播。
另一种解决方案是坚持您的描述。听100个事件真的有问题吗?最后,您将只打开十几个需要在服务器端进行身份验证的通道,并且只打开 1 个 websocket 连接。在频道上通过身份验证后,您无论如何都会收到消息,无论您是否在收听它们。
诀窍是使您的前端代码尽可能干净和干燥。我个人经常使用 Vue、Vuex 和 vuex-orm,其中 orm 反映了我后端的数据结构。当数据插入前端 orm 时,会在我的 webhook 逻辑处运行回调。删除数据后,会在我离开频道等的地方运行回调。
,您可以将 Uri
、CalendarEventCreated
、CalendarEventRejected
合并到 CalendarEventUpdated
中,然后提供带有负载的事件类型。基本上每个用户可以使用一个频道或每个日历使用一个频道;确保调度和侦听完全不同,但总体上没有更多或更少的事件/侦听器(假设两种方法同样有效)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。