推送系统里使用 UPD 还是TCP做心跳包?

来源:互联网 发布:怎么在手机淘宝交电费 编辑:程序博客网 时间:2024/04/30 15:44

UDP是无连接的。客户端每隔一定时间发一次给服务端,服务端每隔一定时间判断一次,如果某个客户端大于一定时间没有包来往,则可认为该客户端“掉线”了。

心跳包只是用来负责维护路由端口的,你只需要在最后一次收到或发送数据后的指定时间内,发送一次就可以,至于服务器还是客户端发送并不重要。一般来说,心跳包是一个往复,即从一方发往另一方后,另一方应回复一个确认收到心跳包,否则,由于在中间路由过程中,说不准被那个路由器丢包,你所谓的连接也就无法正确的保持。

虽然TCP本身的包头要比UDP多,但是UDP在实际应用中往往需要维护双向通道,就必须要通过大量的心跳包数据来维护端口资源。总的比较起来,UDP的实际流量要比TCP还要大。很多使用者在初期的时候并不了解UDP需要大量心跳包来维持端口资源这个问题,往往都认为UDP要比TCP更节省流量,实际上这里存在着一个误区。

在某些特定的应用场合,例如一些银行的时时交互系统,对响应速度要求很高,此时数据传输频率较快,不需要大量心跳包维持UDP端口资源,采用UDP就比较有利了。

0 0