【发布时间】:2015-12-29 15:22:11
【问题描述】:
我已经阅读了很多关于 websocket 的内容,并且已经在我的系统中实现了它们。这个问题是关于如何正确使用它们。我想以正确的方式实现通知和聊天系统。
对于通知,我有频道“通知/频道”,对于聊天,我有频道“聊天/频道”。
这两个渠道是不是太“全球化”了?假设当网站有 1.000.000 个用户时,这意味着所有这些用户都将在这两个渠道中。当一个通知被发送给另一个特定用户时,这意味着该消息是通过一个频道发送的,该频道有 1.000.000 名用户订阅。
与聊天消息相同。假设一个用户想与另一个用户聊天。每条消息都会经过所有用户订阅的频道,最后,由于传递了receiver_id,只有目标用户会收到消息。
如何正确处理通知渠道和“私人”聊天渠道?
为每个用户创建一个“子频道”(群聊和通知,例如“notifications/channel/user1”)会更高效、更安全,还是让所有用户进入一个大频道?
【问题讨论】:
-
没有想法?我认为这是每个人在谈到 websockets 时都应该考虑的事情,所以一定有推荐的方法来做到这一点。
-
您真的希望所有 100 万用户在同一个群组中聊天吗?否则,您显然需要将事物划分为子组。与通知相同。除了性能影响之外,出于隐私原因,并非所有用户都应该收到所有通知。
-
我不是指在一个大群组中聊天或发送通知 - 我的意思是在一个大频道中并将它们发送给特定用户。
-
如果您想针对单个用户,为什么要设置一个大频道(大概将收件人作为负载的一部分)而不是为用户组或每个用户主题设置专用频道?
-
@user3746259,在这种情况下,您误用了行话“频道”。从上下文来看,您似乎正在考虑一个套接字,即用户连接到您的服务器的方式的逻辑表示。频道一词意味着广播域:有人向频道发送消息,订阅该频道的每个人都会收到它。 -- 那么,你的意思是通道还是连接套接字? (或者,你的意思完全是别的意思,需要帮助想出正确的术语吗?)
标签: php websocket notifications rpc publish-subscribe