关于心跳包的问题

时间:2022-10-13 19:31:26
我们知道,处在内网中的客户端,向服务器发送一个数据包以后,会在路由器上建立一个映射,把内网IP和端口映射成外网IP和端口。

而且只要一段时间(比如60秒)没有数据传送,那这个映射会失效。所以,客户端必须每隔一段时间发送一个心跳包。

我的问题是:服务器发送给客户端的数据,是否也起到心跳包的作用?客户端一个心跳包不发,服务器向客户端每隔30秒发一个数据包,是否也能起到维持这种映射的作用?

5 个解决方案

#1


也可以的~~~

#2


可以        。                                      

#3


可以维持,
长链接由客户端发心跳来维持比较常规

#4


引用 3 楼 xian_wwq 的回复:
可以维持,
长链接由客户端发心跳来维持比较常规


我的程序也是由客户端发送心跳包的。

但是,我们得尽可能的减轻网络的负担。比如:心跳包本来是30秒发送一次。可是在20秒后,客户端向服务器发送了一次数据。这次发送数据可以起到心跳包的作用。那么心跳包就不必按预定时间(也就是10秒后)发送了。可能重置它的时钟,在30秒后发送。

同样,服务器传来数据,这个既然能起到心跳包的作用,那也可以把心跳时钟重置一下,让它在30秒以后发送。这样可以减轻系统和网络的负担。

#5


引用 4 楼 screen12 的回复:
Quote: 引用 3 楼 xian_wwq 的回复:

可以维持,
长链接由客户端发心跳来维持比较常规


我的程序也是由客户端发送心跳包的。

但是,我们得尽可能的减轻网络的负担。比如:心跳包本来是30秒发送一次。可是在20秒后,客户端向服务器发送了一次数据。这次发送数据可以起到心跳包的作用。那么心跳包就不必按预定时间(也就是10秒后)发送了。可能重置它的时钟,在30秒后发送。

同样,服务器传来数据,这个既然能起到心跳包的作用,那也可以把心跳时钟重置一下,让它在30秒以后发送。这样可以减轻系统和网络的负担。

个人观点,供参考
1.网络负担其实一样,客户端发给服务器和服务器发给客户端,带宽占用无差别;
2.服务器的地位比客户端重要的多,客户端一般来说压力都不会太大,反而是服务器资源要精打细算,要省着用。
作为通讯软件,发生中断需要重连处理都是最基本的,这些是客户端的本分工作

#1


也可以的~~~

#2


可以        。                                      

#3


可以维持,
长链接由客户端发心跳来维持比较常规

#4


引用 3 楼 xian_wwq 的回复:
可以维持,
长链接由客户端发心跳来维持比较常规


我的程序也是由客户端发送心跳包的。

但是,我们得尽可能的减轻网络的负担。比如:心跳包本来是30秒发送一次。可是在20秒后,客户端向服务器发送了一次数据。这次发送数据可以起到心跳包的作用。那么心跳包就不必按预定时间(也就是10秒后)发送了。可能重置它的时钟,在30秒后发送。

同样,服务器传来数据,这个既然能起到心跳包的作用,那也可以把心跳时钟重置一下,让它在30秒以后发送。这样可以减轻系统和网络的负担。

#5


引用 4 楼 screen12 的回复:
Quote: 引用 3 楼 xian_wwq 的回复:

可以维持,
长链接由客户端发心跳来维持比较常规


我的程序也是由客户端发送心跳包的。

但是,我们得尽可能的减轻网络的负担。比如:心跳包本来是30秒发送一次。可是在20秒后,客户端向服务器发送了一次数据。这次发送数据可以起到心跳包的作用。那么心跳包就不必按预定时间(也就是10秒后)发送了。可能重置它的时钟,在30秒后发送。

同样,服务器传来数据,这个既然能起到心跳包的作用,那也可以把心跳时钟重置一下,让它在30秒以后发送。这样可以减轻系统和网络的负担。

个人观点,供参考
1.网络负担其实一样,客户端发给服务器和服务器发给客户端,带宽占用无差别;
2.服务器的地位比客户端重要的多,客户端一般来说压力都不会太大,反而是服务器资源要精打细算,要省着用。
作为通讯软件,发生中断需要重连处理都是最基本的,这些是客户端的本分工作