Внедряване на функция за присъствие на XMPP в MQTT

В момента работя върху проект, приложение за чат, което използва MQTT, където има 3 клиента A, B, C. когато всеки клиент се присъедини, той първоначално се абонира за 2 теми за A: A-B, A-C, докато B се абонира за A-B, B-C и c подписва t0 A-C и B-C. това са темите, към които се изпращат и получават чат съобщенията. Сега искам да добавя поддръжка за присъствие, за да уведомя дали потребителят е офлайн или онлайн. Има ли някакъв вграден механизъм, който MQTT брокерът поддържа за постигане на тази цел.


person Roshan    schedule 03.05.2014    source източник


Отговори (1)


Някои реализации на брокер може да осигурят подходящи кукички за събития на свързване/прекъсване, за да позволят това, но това не е изискване на протокола за брокерите.

Възможно е да се създаде система за присъствие, като се използват възможностите на протокола

Можете да прочетете повече тук: https://github.com/mqtt/mqtt.github.io/wiki/presence

В обобщение, когато клиент се свърже, той трябва да дефинира съобщение Last Will от 0, което да бъде публикувано в темата client/[client-id] със зададен флаг за задържане. След това трябва да публикува запазено съобщение в тема client/[client-id] със стойност 1.

Това означава, че всеки може да се абонира за client/+ и да получи текущото състояние на всички известни клиенти:

  • съобщение от 1 по тема client/A означава, че A в момента е свързан
  • съобщение от 0 по тема client/A означава, че A в момента е прекъснат

Като настрана, трябва внимателно да обмислите за какви теми искате да се абонират клиентите. Както го описвате, всеки клиент изрично се абонира за темата на всеки друг клиент. Това няма да се мащабира много добре - помислете как бихте могли да използвате заместващи символи, за да управлявате това.

person knolleary    schedule 03.05.2014