Реализация функции присутствия XMPP в MQTT

В настоящее время я работаю над проектом, приложением чата, которое использует MQTT, где есть 3 клиента A, B, C., когда каждый клиент присоединяется, они изначально подписываются на 2 темы для A, его AB, AC, а B подписывается на AB, BC и c подписывается на t0 AC и BC. это темы, в которые отправляются и принимаются сообщения чата. Теперь я хочу добавить поддержку присутствия, чтобы уведомлять, находится ли пользователь в автономном режиме или в сети. Есть ли какой-либо встроенный механизм, который брокер 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