【问题标题】:Implementing TCP keep alive at the application level在应用层实现 TCP keep alive
【发布时间】:2014-07-25 07:49:59
【问题描述】:

我们在一个 Unix 机器 (A) 上设置了一个 shell 脚本,它远程调用部署在另一个机器 (B) 上的 Web 服务。在 A 上,我们只有类路径所需的脚本、配置和 Jar 文件。

批处理作业启动后,控制权从 A 传递到 B,以便 B 上发生事务。通常 B 上的处理会在不到一个小时内完成,但在某些情况下(当我们收到更大的处理数据)该过程持续一个多小时。在这些情况下,防火墙会在 1 小时不活动后断开 2 台主机之间的连接。因此,控件永远不会从 B 返回到 A,并且我们不会收到批处理作业已结束的通知。

为了解决这个问题,我们的网络团队建议在应用程序级别实施保活。

我的问题是 - 我应该在哪里实施这些以及如何实施?是在 Web 服务代码中还是在从 shell 脚本传递的某些参数中?试着用谷歌搜索,但找不到太多。

【问题讨论】:

    标签: tcp batch-processing firewall keep-alive


    【解决方案1】:

    您基本上是发送一条应用程序级别的消息并等待对它的响应。也就是说,您的应用程序必须支持发送、接收和回复这些心跳消息。参见FIX Heartbeat message 例如:

    Heartbeat 监控通信链路的状态,并确定何时未收到最后一串消息。

    当 FIX 连接的任一端在 [HeartBtInt] 秒内没有发送任何数据时,它将发送 Heartbeat 消息。当连接的任一端在 (HeartBtInt + "一些合理的传输时间") 秒内没有收到任何数据时,它将发送一个测试请求消息。如果在 (HeartBtInt + "一些合理的传输时间") 秒后仍然没有收到 Heartbeat 消息,则应认为连接丢失并启动纠正措施....

    此外,您发送的消息应包含本地时间戳,并且对此消息的回复应包含相同的时间戳。这使您可以测量应用程序到应用程序的往返时间。

    此外,某些 NAT 会在 N 分钟不活动后(例如 30 分钟后)关闭您的 TCP 连接。发送心跳消息可让您在需要时保持连接。

    【讨论】:

    • 感谢您的回复。我更多的是从实现的角度来看。我们可以从 shell 脚本中设置这些心跳吗?如果是,如何?抱歉,我不是脚本专家。
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多