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