2015-10-01 116 views
10

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

对于通知,我的信道“的通知/信道”和用于聊天,我的信道“聊天/信道”。

是不是这两个通道太“全球性”?比方说,当该网站有1.000.000个用户时,这意味着所有这些用户都将在这两个渠道中。当一个通知被发送给另一个特定用户时,这意味着该消息通过一个渠道发送,其中1.000.000个用户订阅。

与聊天消息一样。假设用户想要与其他用户聊天。每条消息都会通过所有用户订阅的通道,最终,只有目标用户才会收到由于通过receiver_id而发送的消息。

如何妥善处理通知渠道和“私人”聊天频道?

难道是更好的性能和安全来为每个用户创建一个“子频道”(群聊和通知,E.G“通知/渠道/ USER1”),或者只是让一个大通道的所有用户?

+0

没有想法?我认为这是每个人在网络套接字时都应该思考的问题,所以必须有一个推荐的方法来实现这一点。 – user3746259

+0

你真的想让所有的100万用户在同一组聊天吗?否则,您显然需要将事情划分为子组。与通知一样。除了性能影响之外,并非所有用户都应该因隐私原因收到所有通知。 – gzost

+0

我不是指在一个大群体中聊天或发送通知 - 我的意思是在一个大通道中,并将它们转发给特定用户。 – user3746259

回答

1

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

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

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

聊天信息会是这样的:

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

客户端JavaScript逻辑将确定消息的类型以及如何处理它。服务器端逻辑将确定用户是否“订阅”到指定的聊天室,以便它知道发送给哪个用户的聊天消息。这将保证它的安全,所以你不会向没有订阅房间ID的用户发送聊天消息。

让我知道你是否需要此方法的任何澄清。

+0

不错的做法,但正如我上面所看到的,我得出结论,为特定用户群可以聊天的通知和私人聊天频道创建每个用户频道。也就是说,我认为这是一个更好的分离模型。 – user3746259

+0

*这与您的不同,因为您只有每个用户一个频道并且没有独立的聊天频道。安全检查也可以在服务器端完成,在用户尝试订阅一个频道 – user3746259

+0

**的瞬间,您不能使用该方法直接通过使用js将消息从客户端发送到客户端 - 但我认为这不是所以不好,因为服务器端检查必须在所有情况下始终完成 – user3746259