建议心跳多加一个参数,对于一些接口无论是否有数据接收或发送,都定时发送心跳数据。

veinliu

RT,开发了几个接口,发现别人给的协议都是定时发送心跳,而且不论是否有数据传输,都要定时发送,否则就会断开,gatewayworker的心跳有接收数据就不会发送,建议,增加一个开关,强制发送心跳开关。
这样对于自己内部开发的接口,可以有数据就不发送心跳,对于别的自己不能控制协议的接口,可以开起强制发送心跳。

2299 3 0
3个回答

veinliu

我现在的情况是我这边作为客户端,对方是服务端,协议是对方定的,我为了方便收发数据,用AsyncTCPconnection 做了两个连接,一个连接到gateway的一个端口中作为客户端,另一个连接对方的端口作为客户端,这样数据用pipe就可以把对方模拟成我的gateway的一个客户端了,这样收发数据就方便统一了,担是对方对这个心跳要求是定时30秒的,我这边发LifeSignRequest,对方回复LifeSignResponse。

  • 暂无评论
walkor

gateway推荐客户端发送心跳。服务端发送心跳其实主要是为了检测死链接,也就是一些连接被网关或者路由清理了或者对端断网断电等极端情况,能及时知道并清理,避免死连接不断累积导致内存泄漏。对方服务端在gateway看来是一个客户端,心跳应该客户端发来才合理。如果对方服务端不支持定时给对端发送心跳,可以把gateway心跳间隔小一点,保证在30秒内有数据通讯就行了。

  • veinliu 2019-11-28

    本来我这边应该是客户端,对方是服务端,我为了和别的接口一样收发统一,用两个AsyncTCPconnection 连接然后pipe,来把对方模拟成gateway的服务端,这样就可以把所有的接口一样的对待。但对方是要求这边定时发心跳数据的,不管有没有数据,如果一分钟没有心跳,对方就断开连接。我这边别人给的几个协议,只要是长连接的,都是这样,不管有没有数据,都要发心跳。我们自己的设备的我可以让同事改,但是别人的就真做不了要求,因为对方不只和我们一家通讯。

veinliu

咱们这边改小心跳间隔不管用,我看了日志,这个接口,如果是白天,其本上是0.2秒就就有一条数据传输,只改小心跳间隔这种一直有数据的情况下,咱们这边是一直不会发送心跳的,对方60秒没有收到心跳,就会断开。

  • walkor 2019-11-28

    既然有数据传输就不应该断开连接,这个是对方服务端的问题。如果对端你控制不了,你就加一个全局定时器定时20秒广播一次心跳数据吧。

  • veinliu 2019-11-29

    好的,谢谢。

年代过于久远,无法发表回答
🔝