【问题标题】:MQTT Server Failure Cycle for the Server's Client(on Same App)服务器客户端的 MQTT 服务器故障周期(在同一应用程序上)
【发布时间】:2014-07-24 15:29:24
【问题描述】:

我正在使用 Delphy XE2 在 Pascal 中开发一个 MQTT 服务器应用程序,用于与包含 MQTT 客户端和一个可以接收信息并发送接收 Ack 的 Android 应用程序的其他应用程序连接。为了良好的使用,我需要良好的保留。

在服务器应用程序上,我制作了一个 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 秒,与我的错误同时出现。我通常不会使用那个 logiciel ,如果有人能快速解释我,他会很酷,因为我不知道 wath 是什么,例如,“tapeware”;)

讨论正常 //

37.175 > 37.248 确认 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 确认 50562 > ibm-mqisdp

37.124 > 37.175 Psh,Ack 磁带软件 > ibm-mqisdp

37.175 > 37.124 确认 ibm-mqisdp > 磁带软件

错误 //

37.248 > 37.175 Fin,Ack 57080 > ibm-mqisdp

37.175 > 37.248 确认 ibm-mqisdp > 57080

37.175 > 37.248 鳍,确认 ibm-mqisdp > 57080

37.248 > 37.175 确认 57080 > ibm-mqisdp

37.248 > 37.175 Syn 59022 > ibm-mqisdp

37.175 > 37.248 Rst,Ack ibm-mqisdp > 59022

/!\ 第一个客户端现在被服务器应用程序断开连接(它是 Android 手机或平板电脑的触觉)

37.175 > 37.124 Fin,Ack ibm-mqisdp > tapeware

37.124 > 37.175 Ack 磁带软件 > ibm-mqisdp

37.124 > 37.175 Fin,Ack 磁带 > ibm-mqisdp

37.175 > 37.124 确认 ibm-mqisdp > 磁带软件

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

37.124 > 37.175 确认 crinis-hb > ibm-mqisdp

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

37.175 > 37.124 确认 ibm-mqisdp > crinis-hb

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

37.124 > 37.175 确认 epl-slp > ibm-mqisdp

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

37.175 > 37.124 确认 ibm-mqisdp > epl-slp

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 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 > 项目

37.124 > 37.175 同义项 > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 项目

37.124 > 37.175 同义项 > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 项目

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 > 光谱端口

37.124 > 37.175 合成光谱端口 > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 光谱端口

37.124 > 37.175 合成光谱端口 > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 光谱端口

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 > 告密者

37.124 > 37.175 Syn 告密者 > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 告密者

37.124 > 37.175 Syn trap-port > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 陷阱端口

37.124 > 37.175 Syn informer > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 告密者

37.124 > 37.175 Syn trap-port > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 陷阱端口

37.124 > 37.175 Syn 陷阱端口 > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > 陷阱端口

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

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

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

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

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

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

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

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

37.124 > 37.175 Syn nav-port > ibm-mqisdp

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

37.124 > 37.175 Syn nav-port > ibm-mqisdp

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

37.124 > 37.175 Syn sasp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sasp

37.124 > 37.175 Syn nav-port > ibm-mqisdp

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

37.124 > 37.175 Syn sasp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sasp

37.124 > 37.175 Syn sasp > ibm-mqisdp

37.175 > 37.124 Rst,Ack ibm-mqisdp > sasp

37.124 > 37.175 Fin, Ack ibm-mqisdp > xxnetserver

/!\ 现在,客户端开始重新连接 .但是他们不能通信,服务器只是让他们连接和减去

这不是始终相同的消息,但通常非常相似

我要去找^^

非常感谢 =)

【问题讨论】:

  • '我的客户尝试发送消息但失败' - 它究竟是如何失败的?是否有错误信息、异常?
  • 没有例外。只需在 MQTT 的 TimerProc 中进行,消息重试发布但不被接收。因此客户端与服务器断开连接。但是客户端在同一个应用程序上,所以我不明白为什么连接不稳定......
  • 您是否尝试分析网络流量(使用 Wireshark)?
  • up =) 抱歉,如果不删除服务器,我还没有找到解决此问题的其他方法...有人可以帮忙吗?

标签: delphi wireshark mqtt


【解决方案1】:

您必须深入了解您的 MQTT 代理代码和日志。 查看 MQTT Clean Session 标志的代理实现,在尝试使用相同的客户端 ID 和清理会话重新连接时可能会导致一些阻塞:

clean_session 如果为 False,则客户端为持久客户端,并且在客户端断开连接时将保留订阅信息和排队消息。

clean_session 如果为 True,代理将在断开连接时删除有关此客户端的所有信息。

【讨论】:

  • @Guillaume 我知道这是一个老问题,但我很想知道这对你有用吗?谢谢。
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多