Websockets 通知/聊天系统

Websockets Notification- / Chat- System

我已经阅读了很多关于 websockets 的文章,并且已经在我的系统中实现了它们。这个问题是关于如何正确使用它们的。我想以正确的方式实现通知和聊天系统。

对于通知,我有频道 "notifications/channel",对于聊天,我有频道 "chats/channel"。

这两个频道是不是也"global"?假设当站点有 1.000.000 个用户时,这意味着所有这些用户都将在这两个渠道中。当一个通知发送给另一个特定用户时,这意味着该消息是通过一个频道发送的,该频道有 1.000.000 个用户订阅。

与聊天消息相同。假设一个用户想与另一个用户聊天。每条消息都会通过所有用户订阅的频道,最后只有目标用户会收到消息,因为通过了 receiver_id.

如何正确处理通知渠道和"private"聊天渠道?

Would it be more performant and secure to create for each User a "sub channel " (Group chats And notifications, E.G "notifications/channel/user1"), or just let all users in one big channel?

就我个人而言,解决这个问题的方式如下:

每个用户有 1 个 websocket 连接。此连接将用于传递所有数据。我会使用 json 格式来回传递数据。我会在 json 结构中使用一个字段来指示消息类型和其他信息,例如聊天室 ID。所以,如果我想发送通知,它可能是这样的(非常简单的例子):

{
    "type":"notification",
    "message":"New Mail"
}

聊天消息应该是这样的:

{
    "type":"chat",
    "chatID":4756,
    "message":"Hello, world!"
}

客户端Javascript 逻辑将确定消息的类型以及如何处理它。服务器端逻辑将确定用户是否 "subscribed" 到指定的聊天室,因此它会知道将什么聊天消息发送给什么用户。这将确保它的安全,因此您不会向未订阅房间 ID 的用户发送聊天消息。

如果您需要对此方法进行任何说明,请告诉我。