Как реализовать мессенджер типа WhatsApp с помощью MQTT?

Я хочу реализовать мессенджер, как WhatsApp, с использованием протокола MQTT. Какие уроки я должен прочитать?

Меня смущает несколько вещей:

  1. Как мне реализовать структуру тем для обмена сообщениями? (В настоящее время я использую / domainname / phonenumber / (Если телефон A отправляет сообщение на телефон B, он опубликует сообщение на / domainname / B /)
  2. Если клиент B переходит в автономный режим и через некоторое время подключается к сети, как он получит сообщение, отправленное ему (в тему / имя домена / B /), когда клиент был в автономном режиме?
  3. Как реализовать подтверждение отправки / доставки / прочтения?

Я понимаю, что это очень простые вопросы, но, к сожалению, мне не удалось найти никаких ресурсов, которые помогли бы выполнить первые шаги.

Заключение:
Поговорив с людьми, которые уже реализовали крупномасштабное развертывание мессенджера в MQTT, я пришел к выводу, что MQTT следует использовать просто как протокол. Pub / Sub хорош для начала, но у вас должен быть слой собственной бизнес-логики для гибкости и производительности. Однако вы можете реализовать большинство основных требований к мессенджеру, используя дерево публикаций / поддеревьев, но вы будете ограничены им, и его будет сложно расширить позже.


person Rahul Prasad    schedule 14.09.2015    source источник
comment
Если у вас есть решение, не могли бы вы поделиться?   -  person Manish Kumar    schedule 27.01.2016
comment
@Toomuchtolearn Ага. Обратившись к людям, которые уже реализовали крупномасштабное развертывание мессенджеров в MQTT, я пришел к выводу, что MQTT следует использовать просто как протокол. Pub / Sub хорош для начала, но у вас должен быть слой собственной бизнес-логики для гибкости и производительности. Однако вы можете реализовать его с помощью дерева публикаций / поддеревьев, но вы будете ограничены им, и его будет сложно расширить позже.   -  person Rahul Prasad    schedule 28.01.2016
comment
скажем, для приложения типа WhatsApp у нас тоже есть выбор «XMPP» и MQTT. Я слышал, что MQTT очень легкий, поэтому не требует батареи, но XMPP слишком тяжелый по сравнению с MQTT. ТАК, что вы возьмете на себя этих двоих и с чем вы пойдете?   -  person Manish Kumar    schedule 29.01.2016
comment
..и еще о каком ограничении ты говоришь? хорошо ли MQTT работает с потоковой передачей аудио-видео?   -  person Manish Kumar    schedule 29.01.2016


Ответы (3)


  1. Структура тем выглядит нормально, но, вероятно, должен иметься ACL, чтобы клиенты могли подписываться только на свои собственные темы.
  2. До тех пор, пока вы не установите для параметра cleansession значение true, брокер должен хранить и пересылать любые сообщения, отправленные в тему, на которую был подписан клиент, до того, как он отключился.
  3. MQTT не поддерживает отправленные / доставленные / прочитанные уведомления, вам нужно будет реализовать это самостоятельно, проще всего будет иметь 2 темы для каждого клиента, одну для получения сообщений и одну для получения уведомлений. Каждое сообщение должно иметь идентификационный номер, который можно использовать в уведомлениях, отправляемых обратно исходному отправителю.
person hardillb    schedule 14.09.2015
comment
Я тестировал клиента с помощью mqtt: //test.mosquitto.org для пункта 2. Включена ли очистка сеанса? Потому что он не возвращал сообщения, когда подписчик выходит в сеть. - person Rahul Prasad; 15.09.2015
comment
cleansession - это вариант для клиента, а не для брокера. Он также полагается на одинаковый идентификатор клиента. Прочтите это для лучшего объяснения hivemq.com/ < / а> - person hardillb; 15.09.2015

Я реализовал фундаментальные mqtt функции с помощью собственного клиента реакции, он может отправлять / получать сообщения, используя стандартный сервер mqtt, и весь код был интегрирован в проект rnset, который является собственным проектом github response.
Вы можете проверить это из здесь.
После запуска rnset вы можете проверить демонстрацию с rnset->功能(demos)->MQTTChat

person Sui junqiang    schedule 05.03.2019
comment
Кстати, демонстрация MQTTClient использует мой собственный сервер, и у меня дома работает emqtt. - person Sui junqiang; 05.03.2019
comment
Хотя ваша ссылка может помочь OP, лучше указать здесь суть. - person Tiw; 05.03.2019

rnset / qmtt / mqttbox; на самом деле демонстрация rnset / mqtt работает на моем iphon7p через 4G, а mqttbox работает на моем Mac, сообщение может быть получено одновременно.

Пользовательский интерфейс iPhone / Mac:

UI IPhone / Mac

person Sui junqiang    schedule 05.03.2019
comment
Измените исходный ответ, а не публиковать новый - person hardillb; 05.03.2019