#delphi #wireshark #mqtt
#delphi #wireshark #mqtt
Вопрос:
Я работаю над серверным приложением MQTT на языке Pascal с Delphy XE2 для соединения с другим приложением, которое содержит клиент MQTT и приложение Android, которое может получать информацию и отправлять recept Ack. Для хорошего использования мне нужно хорошее сохранение для этого.
В серверном приложении я создал клиент MQTT для отслеживания активности моей системы и проверки исправности трафика сообщений.
Это приложение работает хорошо, утечки памяти нет (проверьте с помощью FastMM), и все функции в порядке (я все проверил …). Но я не понимаю, все работает хорошо в течение нескольких дней, и через мгновение мой сервер перестает прослушивать клиента.
Я могу уничтожить объект клиента и сервера, повторно создать и повторно подключиться, ничто не может восстановить приложение, я должен закрыть и открыть новый процесс моего сервера.
После поиска в Интернете я не нашел никакой информации о подобном цикле сбоев.
Точно, это всегда одно и то же поведение :
-
Все в порядке.
-
Мой клиент пытается отправить сообщение, но терпит неудачу.Он пытается 8 раз (MaxRetry).
-
Он сам отключился.После этого он постоянно переподключается, потому что он находится на том же компьютере, но он не запускает все сообщения.
-
Повторное и завершенное отключение ИТ-соединения приводит к отключению других клиентов, потому что это основной элемент передачи. // Возврат к обычно
Клиент конфигурации :
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 Я знаю, что это старый вопрос, но мне любопытно узнать, сработало ли это для вас? Спасибо.