如何使用MQTT实现whatsapp类型的messenger?

如何使用MQTT实现whatsapp类型的messenger?,mqtt,instant-messaging,messenger,Mqtt,Instant Messaging,Messenger,我想使用MQTT协议实现一个messenger,就像whatsapp一样。 我应该阅读哪些教程 我对几件事感到困惑: 我应该如何实现消息传递的主题结构?(目前我正在使用/domainname/phonenumber/(如果电话A需要向电话B发送消息,它将向/domainname/B/发布消息) 如果客户端B脱机并在一段时间后联机,当客户端脱机时,它将如何接收发送给他的消息(到topic/domainname/B/) 我如何实现发送/交付/读取确认 我知道这些都是非常基本的问题,但不幸的是,我找不

我想使用MQTT协议实现一个messenger,就像whatsapp一样。 我应该阅读哪些教程

我对几件事感到困惑:

  • 我应该如何实现消息传递的主题结构?(目前我正在使用/domainname/phonenumber/(如果电话A需要向电话B发送消息,它将向/domainname/B/发布消息)
  • 如果客户端B脱机并在一段时间后联机,当客户端脱机时,它将如何接收发送给他的消息(到topic/domainname/B/)
  • 我如何实现发送/交付/读取确认
  • 我知道这些都是非常基本的问题,但不幸的是,我找不到任何指导初始步骤的资源

    结论:
    在与已经在MQTT中实现了大规模messenger部署的人员交谈之后,我得出结论,MQTT应该只作为一个协议使用。发布/订阅是一个好的开始,但您应该有一个自己的业务逻辑层,以实现灵活性和性能。但是,您可以使用发布/订阅来实现大多数基本的messenger需求ree,但您将受限于它,以后将很难扩展它

  • 主题结构看起来不错,但可能应该有一个ACL,以便 客户端只能订阅自己的主题
  • 只要您没有将“cleansession”选项设置为true,那么代理就应该存储并转发发送到客户端在断开连接之前订阅的主题的任何消息
  • MQTT不支持发送/传递/读取通知,您需要自己实现,最简单的方法是每个客户端有两个主题,一个用于接收消息,一个用于接收通知。每条消息都应该有一个id号,可以在发送回原始发件人的通知中使用

  • 我已经通过react本机客户端实现了基本的
    mqtt
    功能,它能够使用标准mqtt服务器发送/接收消息,并且所有代码都已集成到rnset项目中,这是一个github react本机项目。
    您可以从中查看。
    运行
    rnset
    后,您可以从
    rnset->功能(演示)->MQTTChat

    rnset/qmtt/mqttbox; 事实上,rnset/mqtt演示在我的iPhone7p上运行4G,而mqttbox在我的Mac上运行,可以同时接收消息

    UI-IPhone/Mac:


    我正在使用mqtt://test.mosquitto.org 对于第2点,是否有“cleansession”启用?因为它在订户联机时未返回消息。cleansession是一个客户端选项而不是代理选项。它还依赖于客户端id相同。阅读此内容以获得更好的解释,如果您得到了解决方案,请与已实施大规模部署的人员分享?@Toomuchtolearn Yupmessenger部署在MQTT中,我的结论是MQTT应该只是一个协议。Pub/Sub是一个好的开始,但您应该有一个自己的业务逻辑层,以实现灵活性和性能。但是,您可以使用Pub/Sub树来实现它,但您将受到限制,并且以后将很难扩展。比如说whatsapp键入app我们有太多的选择“XMPP”和
    MQTT
    。我听说MQTT非常轻,所以对电池友好,但是XMPP比MQTT太重。那么你对这两种类型有什么看法?你会怎么做?你说的是什么限制?MQTT与音频视频流配合得好吗?顺便问一下,mqttd客户端emo正在使用我自己的服务器,并且在我家运行emqtt。虽然您的链接可能有助于操作,但最好在此处包含要点。请编辑您的原始答案,而不是发布新答案