【问题标题】:Android client tell Syn & receive Rst AckAndroid 客户端告诉 Syn 并接收 Rst Ack
【发布时间】:2015-10-24 03:28:17
【问题描述】:

我正在为一个 App Android 工作,我需要我的手机始终连接到我的服务器 MQTT...

但是我的手机可能会失去连接(Tel :[FIN;ACK]; Serv:[FIN;ACK];Tel:[ACK]);之后,当他发送 [SYN] 消息以将其连接到服务器 MQTT 时,服务器发送 [RST,ACK]... 而这正是我的应用程序服务处于活动状态时。

在我的情况下,如果我希望我的手机可以重新连接,我必须重新启动我的服务器,但是,我无法重新启动我的服务器(可以使用多部手机,并且我需要实时性能)。

有没有可能在不重新启动服务器的情况下连接我的手机?

感谢您的时间。

最好的尊重

纪尧姆

【问题讨论】:

  • 期望在移动环境中实现近乎实时的网络性能是不可行的,因为手机连接速度(LTE 到 HSPA 到 Edge)或刚刚用完,所以总会有时间无法使用手机覆盖范围。您永远无法缩短 TCP 套接字关闭逻辑。
  • 谢谢,我知道实时是不可能的,但我需要与一个 dect 系统(短信)竞争,我不能切断所有电话来拯救其中一个……我什么也做不了通过电话?
  • 鉴于 MQTT 部分都应该作为服务运行(前台线程上没有网络)订阅来自 Android 的网络状态广播消息,使用这些来断开连接并根据需要重建
  • 谢谢 ;) 我会测试一下 =P

标签: android tcp-ip mqtt


【解决方案1】:

我认为您的问题与我遇到的问题相似。连接已半关闭。详情请见http://www.codeproject.com/Articles/37490/Detection-of-Half-Open-Dropped-TCP-IP-Socket-Conne

我解决这个问题的方法是 i) 每 5 秒添加一次保持活动消息。从手机到服务器,ii)如果 15 秒内没有传入数据,则让服务器关闭连接。请参阅http://www.forward.com.au/pfod/CheapWifiShield/index.html 和 www.pfod.com.au

MQTT 包含 keepAlives(PING 请求消息),因此您只需修改客户端以指定较短的 keepAlive 间隔 见http://www.hivemq.com/blog/mqtt-essentials-part-10-alive-client-take-over 让 MQTT 服务器在停止获取您的数据或 keepAlive 消息后更快地关闭连接。

虽然上面的链接状态 "broker 将关闭之前与同一个客户端的连接(由相同的客户端标识符决定),并与新连接的客户端建立连接。这种行为确保半开连接不会成立在同一客户端建立新连接的方式。”

所以你根本不应该有这个问题!!!

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多