В момента работя върху проект, приложение за чат, което използва MQTT, където има 3 клиента A, B, C. когато всеки клиент се присъедини, той първоначално се абонира за 2 теми за A: A-B, A-C, докато B се абонира за A-B, B-C и c подписва t0 A-C и B-C. това са темите, към които се изпращат и получават чат съобщенията. Сега искам да добавя поддръжка за присъствие, за да уведомя дали потребителят е офлайн или онлайн. Има ли някакъв вграден механизъм, който MQTT брокерът поддържа за постигане на тази цел.
Внедряване на функция за присъствие на XMPP в MQTT
Отговори (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 в момента е прекъснат
Като настрана, трябва внимателно да обмислите за какви теми искате да се абонират клиентите. Както го описвате, всеки клиент изрично се абонира за темата на всеки друг клиент. Това няма да се мащабира много добре - помислете как бихте могли да използвате заместващи символи, за да управлявате това.