Цикл сбоя сервера MQTT для клиента сервера (в том же приложении)

#delphi #wireshark #mqtt

#delphi #wireshark #mqtt

Вопрос:

Я работаю над серверным приложением MQTT на языке Pascal с Delphy XE2 для соединения с другим приложением, которое содержит клиент MQTT и приложение Android, которое может получать информацию и отправлять recept Ack. Для хорошего использования мне нужно хорошее сохранение для этого.

В серверном приложении я создал клиент MQTT для отслеживания активности моей системы и проверки исправности трафика сообщений.

Это приложение работает хорошо, утечки памяти нет (проверьте с помощью FastMM), и все функции в порядке (я все проверил …). Но я не понимаю, все работает хорошо в течение нескольких дней, и через мгновение мой сервер перестает прослушивать клиента.

Я могу уничтожить объект клиента и сервера, повторно создать и повторно подключиться, ничто не может восстановить приложение, я должен закрыть и открыть новый процесс моего сервера.

После поиска в Интернете я не нашел никакой информации о подобном цикле сбоев.

Точно, это всегда одно и то же поведение :

  1. Все в порядке.

  2. Мой клиент пытается отправить сообщение, но терпит неудачу.Он пытается 8 раз (MaxRetry).

  3. Он сам отключился.После этого он постоянно переподключается, потому что он находится на том же компьютере, но он не запускает все сообщения.

  4. Повторное и завершенное отключение ИТ-соединения приводит к отключению других клиентов, потому что это основной элемент передачи. // Возврат к обычно

Клиент конфигурации :

 TTClientComp.AutoSubscribe := false;
TTClientComp.Broker := false;
TTClientComp.Clean := TRUE;
TTClientComp.Host := 'localhost';
TTClientComp.KeepAlive := 10;
TTClientComp.LocalBounce := false;
TTClientComp.MaxRetries := 8;
TTClientComp.Port := 1883;
TTClientComp.RetryTime := 60;
TTClientComp.Tag := 0;
TTClientComp.ClientID:='ClServ';
  

Сервер конфигурации

 TTServeurComp.Port := 1883;
TTServeurComp.RetryTime := 60;
TTServeurComp.MaxRetries := 4;
TTServeurComp.Tag := 0;
TTServeurComp.LocalBounce := false;
  

Если кто-то может мне помочь, пожалуйста.

Извините за мой английский, я тренирую себя, чтобы быть лучше 😉

Спасибо за чтение и за время.

/////////////////////////

Редактировать для com :: (см. На WireShark) (37.124, 139.1, 37.248 — клиент, 175 — сервер)

Это сообщение появляется циклически в течение 3 минут и 7 секунд и одновременно с моей ошибкой. Обычно я не использую эту логику, если кто-нибудь сможет быстро объяснить мне, он будет крут, потому что я не знаю, что такое, например, «tapeware» 😉

Обсуждение нормальное //

37.175 > 37.248 Ack ibm-mqisdp> 57080

139.1> 37.175 Psh, Ack 50562 > ibm-mqisdp

37.175> 139.1 Psh, Ack ibm-mqisdp> 50562

137.1 > 37.175 Ack 50562 > ibm-mqisdp

37.124 > 37.175 Psh,Ack tapeware > ibm-mqisdp

37.175 > 37.124 Ack ibm-mqisdp > tapeware

Bug //

37.248 > 37.175 Fin,Ack 57080 > ibm-mqisdp

37.175 > 37.248 Ack ibm-mqisdp > 57080

37.175 > 37.248 Fin,Ack ibm-mqisdp > 57080

37.248 > 37.175 Ack 57080 > ibm-mqisdp

37.248 > 37.175 Syn 59022 > ibm-mqisdp

37.175 > 37.248 Rst,Ack ibm-mqisdp > 59022

/! The first Client is disconnected now by the Server Application (it’is an Android phone or tablet tactil)

37.175 > 37.124 Fin,Ack ibm-mqisdp > tapeware

37.124 > 37.175 Ack tapeware > ibm-mqisdp

37.124 > 37.175 Fin,Ack tapeware > ibm-mqisdp

37.175 > 37.124 Ack ibm-mqisdp > tapeware

37.175 > 37.124 Fin,Ack ibm-mqisdp > crinis-hb

37.124 > 37.175 Ack crinis-hb > ibm-mqisdp

37.124 > 37.175 Fin,Ack crinis-hb > ibm-mqisdp

37.175 > 37.124 Ack ibm-mqisdp > crinis-hb

37.175 > 37.124 Fin,Ack ibm-mqisdp > epl-slp

37.124 > 37.175 Ack epl-slp > ibm-mqisdp

37.124 > 37.175 Fin,Ack epl-slp > ibm-mqisdp

37.175 > 37.124 Ack ibm-mqisdp > epl-slp

37.124 > 37.175 Syn rnm > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > rnm

/! Here , I think the others client begin to be disconnected , but I have clean a little for have only one client.

37.124 > 37.175 Syn rnm > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > rnm

37.124 > 37.175 Syn rnm > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > rnm

37.124 > 37.175 Syn v-one-spp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > v-one-spp

37.124 > 37.175 Syn v-one-spp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > v-one-spp

37.124 > 37.175 Syn an-pcp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > an-pcp

37.124 > 37.175 Syn v-one-spp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > v-one-spp

37.124 > 37.175 Syn an-pcp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > an-pcp

37.124 > 37.175 Syn an-pcp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > an-pcp

37.124 > 37.175 Syn item > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > item

37.124 > 37.175 Syn item > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > item

37.124 > 37.175 Syn item > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > item

37.124 > 37.175 Syn spw_dnspreload > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > spw_dnspreload

37.124 > 37.175 Syn spw_dnspreload > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > spw_dnspreload

37.124 > 37.175 Syn qtms-bootstrap > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > qtms-bootstrap

37.124 > 37.175 Syn spw_dnspreload > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > spw_dnspreload

37.124 > 37.175 Syn qtms-bootstrap > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > qtms-bootstrap

37.124 > 37.175 Syn qtms-bootstrap > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > qtms-bootstrap

37.124 > 37.175 Syn spectraport > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > spectraport

37.124 > 37.175 Syn spectraport > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > spectraport

37.124 > 37.175 Syn spectraport > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > spectraport

37.124 > 37.175 Syn sse-app-config> ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sse-app-config

37.124 > 37.175 Syn sse-app-config> ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sse-app-config

37.124 > 37.175 Syn sscan > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sscan

37.124 > 37.175 Syn sse-app-config> ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sse-app-config

37.124 > 37.175 Syn sscan > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sscan

37.124 > 37.175 Syn sscan > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sscan

37.124 > 37.175 Psh,Ack dvapps > ibm-mqisdp

37.175 > 37.124 Ack ibm>-mqisdp > dvapps

37.124 > 37.175 Syn opentrac > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > opentrac

37.124 > 37.175 Syn opentrac > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > opentrac

37.124 > 37.175 Syn opentrac > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > opentrac

37.124 > 37.175 Syn informer > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > informer

37.124 > 37.175 Syn informer > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > informer

37.124 > 37.175 Syn trap-port > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > trap-port

37.124 > 37.175 Syn informer > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > informer

37.124> 37.175 Syn trap-порт > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> trap-порт

37.124> 37.175 Syn trap-порт > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> trap-порт

37.124 > 37.175 Syn trap-port-mom > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> trap-port-mom

37.124 > 37.175 Syn trap-port-mom > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> trap-port-mom

37.124 > 37.175 Syn trap-port-mom > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> trap-port-mom

37.124 > 37.175 Syn trap-port-mom > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> trap-port-mom

37.124> 37.175 Syn nav-port > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> nav-port

37.124> 37.175 Syn nav-port > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> nav-port

37.124 > 37.175 Syn sasp > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> sasp

37.124> 37.175 Syn nav-port > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> nav-port

37.124 > 37.175 Syn sasp > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> sasp

37.124 > 37.175 Syn sasp > ibm-mqisdp

37.175> 37.124 Сначала, Ack ibm-mqisdp> sasp

37.124> 37.175 Fin, Ack ibm-mqisdp> xxnetserver

/! И теперь клиент начинает переподключаться. Но они не могут обмениваться данными, сервер просто позволяет им подключаться и вычитаться

Это не одно и то же сообщение все время, но обычно очень похоже

Я собираюсь искать ^^

Большое спасибо =)

Комментарии:

1. «Мой клиент пытается отправить сообщение, но сбой» — как именно происходит сбой? Есть ли сообщение об ошибке, исключение?

2. Никаких исключений. Просто продолжайте в режиме TimerProc MQTT, повторите попытку публикации сообщения, но не получите. таким образом, клиент отключается сервером. Но клиент находится в том же приложении, поэтому я не понимаю, почему соединение не является устойчивым…

3. Вы пытались анализировать сетевой трафик (используя Wireshark)?

4. up =) Извините, я не нашел другого способа решения этой проблемы без удаления сервера… Кто-нибудь может помочь?

Ответ №1:

Вы должны внимательно изучить свой код и журналы брокера MQTT. Посмотрите на реализацию брокером флага MQTT Clean Session, который может вызвать некоторые блокировки при попытке повторного подключения с тем же идентификатором клиента и чистого сеанса:

clean_session Если значение False, клиент является надежным клиентом, и информация о подписке и сообщения, поставленные в очередь, будут сохранены при отключении клиента.

clean_session Если True, брокер удалит всю информацию об этом клиенте при его отключении.

Комментарии:

1. @Guillaume Я знаю, что это старый вопрос, но мне любопытно узнать, сработало ли это для вас? Спасибо.