我在理解如何在实时 laravel 应用程序中实现存在通道时遇到了一些麻烦。
根据我在文档中阅读的内容和许多其他有关此的在线资源,我只需要在 Presence 频道上广播并让客户在该特定频道上收听。顺便说一句,我使用的是 laravel 5.6,在前端我使用的是 Larvel Echo。
所以,我的问题是我需要广播的频道名称。如果它是像“<em>chat”这样的通用内容,我的应用程序中的所有用户都将向该频道广播,并且不知道该用户是谁(不是朋友)的用户会收到此通知,他们必须处理此新信息。当然,如果用户不在他们的朋友列表中,我可以选择不更新 UI 或者什么都不做,但这似乎是客户端上很多无用的通知处理。在我看来,这似乎不是一个好主意。
第二种选择是将存在广播到一个唯一的频道名称,例如“<em>chat-[unique]”,其中“<em>[unique]”类似于登录用户的 id/hash,但这只是意味着每个客户端应用程序中的日志必须监听所有朋友的通知,所以他必须连接到chat-5426、chat-9482、chat-4847等等,给他所有的朋友。同样,这似乎并不有效。但这还不是全部。朋友列表是分页的,因此用户在登录后只能看到他的前 20 个朋友(除非他向下滚动),我对用户可以拥有多少朋友没有限制 - 我可以实施限制,但仍然会数以千计,所以我认为我无法在一次查询中从数据库中获取所有用户。我有使用最后一种方法的想法,在前端收听每个用户的频道,就像他们一样,分页。然后,当滚动和导航时,如果新用户在视口中可见,请将其添加到我的朋友对象(没有 UI 更改)并开始在他的状态频道上收听。我可以看到这种方法很容易失败。
但是我想到这一点,我不知道,对于一家小型初创公司来说,在线展示似乎总是非常消耗资源并且几乎不值得。我不知道实现它的好方法是什么,因为我以前从未做过。我将不胜感激任何帮助,因为我在该主题上找到的所有在线资源都实现了我询问的第一种方法,所有用户都连接到通用频道,但这始终适用于教程,因为他们只有 2-3 个用户数据库和没有人提到有朋友的用户。我看不到这在现实世界中有效,但我可能错了。
提前致谢