实现TCP在应用程序级别保持活动状态

时间:2014-06-04 15:12:38

标签: tcp batch-processing firewall keep-alive

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

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

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

我的问题是 - 我应该在哪里实施这些以及如何实施?那是在Web服务代码中还是从shell脚本或其他东西传递的一些参数?试图谷歌周围,但找不到多少。

1 个答案:

答案 0 :(得分:0)

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

  

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

     

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

此外,您发送的邮件应包含本地时间戳,并且对此邮件的回复应包含相同的时间戳。这允许您测量应用程序到应用程序的往返时间。

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