Websocket 用于聊天应用程序中客户端通信的MQTT

Websocket 用于聊天应用程序中客户端通信的MQTT,websocket,chat,mqtt,messagebroker,Websocket,Chat,Mqtt,Messagebroker,我想开发聊天应用程序,并使用MQTT和Web套接字进行实时通知、客户端的活动状态(主要是Web浏览器)。我想知道如何以最好的方式在客户机之间进行通信,以减少MQTT的负载并实现平滑的通信 例如,如果客户端A向客户端B发送消息,则选项为 1)为客户a和客户B之间的沟通制定单独的主题 若应用程序中的客户端数量将增加,那个么每个用户之间的主题数量将大幅增加,这将给MQTT代理带来负载,这看起来不是一个好主意 2)根据唯一的客户端Id发送消息 MQTT不允许基于客户端Id发布消息 3)为所有客户端之间的

我想开发聊天应用程序,并使用MQTT和Web套接字进行实时通知、客户端的活动状态(主要是Web浏览器)。我想知道如何以最好的方式在客户机之间进行通信,以减少MQTT的负载并实现平滑的通信

例如,如果客户端A向客户端B发送消息,则选项为

1)为客户a和客户B之间的沟通制定单独的主题

若应用程序中的客户端数量将增加,那个么每个用户之间的主题数量将大幅增加,这将给MQTT代理带来负载,这看起来不是一个好主意

2)根据唯一的客户端Id发送消息

MQTT不允许基于客户端Id发布消息

3)为所有客户端之间的通信制作一个主题(所有客户端将订阅该主题,如果消息与之相关,则相关客户端将执行其操作)

很多客户端会收到不需要的消息,随着客户端数量的增加,问题也会增加

如果所有客户端都订阅了一个主题,是否可以筛选出应该接收消息的客户端

其他解决方案可以是什么,以使一个平滑的聊天应用程序,以及其他应用程序使用什么解决方案,如slack、telegram、whatsapp等。他们是否也使用MQTT,如果没有,那么他们如何实现这一点


提前感谢

您对第1点的理解有缺陷

主题在代理上的开销几乎为零。拥有数百万个主题不是问题。唯一的间接费用是:

  • 客户机订阅的主题列表,实际上不是问题
  • 消息排队等待具有永久订阅的脱机客户端。这并不受主题数量的影响,只受客户端脱机时发送到该客户端的消息数量的影响

消息的唯一处理开销是检查给定客户端订阅的主题列表(可能需要一点ACL检查),然后是实际发送TCP/IP数据包以将该消息发送到客户端的开销。

如果我在客户端之间引入一个微服务作为中介,该怎么办。该微服务将使用MQTT主题与每个客户机建立连接,并充当中间人。因此,Microservice将订阅每个客户端主题,并将消息作为消息历史记录保存在数据库中,如果Receiver客户端联机,则它将同时在Receiver客户端主题中发布消息,如果其脱机,则消息已在数据库中。因此,每当Receiver联机时,它都可以调用API来获取消息历史记录。再添加一个客户端不会改变任何事情。MicroService客户端将始终联机,一旦浏览器客户端联机,它们就可以通过调用API从数据库中获取旧消息,而broker不需要存储任何信息。因此,不会删除开销(对于离线时发送给该客户端的消息数量)@JayendraSingh这真是个好主意,直到它实际上不是端到端聊天,隐私问题!!