搜索
bottom↓
回复: 27

请教朋友们TCP服务器一定要对设备发心跳才能不断?

[复制链接]

出75入8汤圆

发表于 2021-12-2 08:30:06 | 显示全部楼层 |阅读模式
请教朋友们TCP服务器一定要对设备发心跳才能不断?必须一分钟一次?频繁发心跳对我设备有干扰。搞服务器的说的一定要发。

出0入0汤圆

发表于 2021-12-2 08:36:49 | 显示全部楼层
这是弄反了吧,心跳多数情况下,是由设备发起的,由设备判断服务器是否在线

出0入16汤圆

发表于 2021-12-2 08:36:52 | 显示全部楼层
长连接你不发,服务器怎么知道你设备有没有掉线,短链接可以不发,发心跳都会有干扰,板子重做吧,你看手游这种几秒断线就直接把你踢掉了

出130入129汤圆

发表于 2021-12-2 08:36:54 | 显示全部楼层
有什么干扰呢?

出75入8汤圆

 楼主| 发表于 2021-12-2 08:56:49 | 显示全部楼层
jermy_z 发表于 2021-12-2 08:36
这是弄反了吧,心跳多数情况下,是由设备发起的,由设备判断服务器是否在线 ...

您好,TCP心跳机制是一分钟吗?就是我设备必须一分钟一次吗?MQTT可以设置为18小时,ONENET也要半个小时。

出75入8汤圆

 楼主| 发表于 2021-12-2 08:59:11 | 显示全部楼层
初音之恋 发表于 2021-12-2 08:36
长连接你不发,服务器怎么知道你设备有没有掉线,短链接可以不发,发心跳都会有干扰,板子重做吧,你看手游 ...

我有5个串口同时接收数据,上面接的是4G模块,不是网线,发的多流量大,客户也不愿意,其中一个串口接4G模块,本来串口数据就大,4G模块一直发着对其它几个串口也有影响,另外多串口并发接收和发送丢数据是不是要DMA或者RTX才可以解决?

出75入8汤圆

 楼主| 发表于 2021-12-2 08:59:58 | 显示全部楼层

5个串口,上面4G占一个,下面还有4个串口,是干扰了数据。

出130入129汤圆

发表于 2021-12-2 09:02:57 | 显示全部楼层
ZHAOBAO511 发表于 2021-12-2 08:59
5个串口,上面4G占一个,下面还有4个串口,是干扰了数据。

空闲时候才发

出100入113汤圆

发表于 2021-12-2 09:03:43 | 显示全部楼层
需要定时发心跳,心跳时间与基站配置有关,超时基站会断开 TCP 连接。以前 2G 时代,各地配置是不一样的,现在4G模块,我们一般 2分钟发一次心跳。

出0入16汤圆

发表于 2021-12-2 09:07:28 | 显示全部楼层
ZHAOBAO511 发表于 2021-12-2 08:59
我有5个串口同时接收数据,上面接的是4G模块,不是网线,发的多流量大,客户也不愿意,其中一个串口接4G ...

不需要实时性的设备使用短链接,要发数据在打开TCP,发完关闭TCP,这样就不需要心跳了,自己发数据一般不会干扰,堆栈溢出?指针错位?

出0入58汤圆

发表于 2021-12-2 09:07:36 | 显示全部楼层
MQTT好像自己会保持心跳

出5入14汤圆

发表于 2021-12-2 09:10:40 | 显示全部楼层
4G通讯、一分钟发一次数据也叫频繁?

出0入0汤圆

发表于 2021-12-2 09:14:48 | 显示全部楼层
串口那点数据量不值得一提吧,还是程序没处理好吧

出0入33汤圆

发表于 2021-12-2 09:30:39 来自手机 | 显示全部楼层
从原理上来说TCP是不需要心跳包的。但是实际情况是我们现在的IPV4网络存在大量的NAT设备,这些NAT网关设备内部会维护一个NAT表,如果你的tcp连接长时间没有收发数据,那么这个连接会持续占用NAT表资源,所以网关会在连接空闲一段时间后将其释放了。
IPV6普及之后这种情况应该能得到极大缓解。

出0入33汤圆

发表于 2021-12-2 09:33:39 来自手机 | 显示全部楼层
在局域网中用两台电脑,开TCPIP调试工具,在连接建立后,即使相隔几天,再发下一个数据包也能成功。

出0入16汤圆

发表于 2021-12-2 10:28:50 | 显示全部楼层
vtte 发表于 2021-12-2 09:30
从原理上来说TCP是不需要心跳包的。但是实际情况是我们现在的IPV4网络存在大量的NAT设备,这些NAT网关设备 ...

主要是还是网络不稳定,TCP底层不能绝对保证能够Open Close成功,服务器关闭连接设备没收到或者设备关闭连接服务器没收到这种情况太多了,谁都不知道是真连接还是死连接,所以只能靠心跳

出130入20汤圆

发表于 2021-12-2 13:41:42 | 显示全部楼层
目前试过4G模块90秒发一次,TCP不会断

出300入477汤圆

发表于 2021-12-2 15:46:52 来自手机 | 显示全部楼层
我们一直用很保守的值,50秒。
因为十年前有基站是空闲超过1分钟就踢人。
我不知道现在还有没有空闲时间这么短的基站了,反正这点流量也不算什么。

出75入8汤圆

 楼主| 发表于 2021-12-2 16:05:55 | 显示全部楼层
谢谢各位热心的坛友,主要是串口收发数据频繁有所影响,看来要设置心跳的。

出0入0汤圆

发表于 2021-12-2 17:16:42 | 显示全部楼层
必须要发。而且间隔尽可能不要太久。

TCP链接,服务器和客户端双方虽说可以设置一个KeepAlive参数。(win需要修改注册表,linux需要设置内核参数,lwip之类的要改头文件配置
但是,服务器到客户端之间这一段会有一个NAT超时时间不一定的问题。
因为不同运营商不同网络,还有不同路由器,wifi等等的nat时间都不一样,有些是1分钟有些是5分钟,有些是28分钟。如果链路在NAT超时时间内没有报文就会被断开。
所以心跳间隔最好不要太久,以适应更多网络环境。

出0入0汤圆

发表于 2021-12-2 17:21:54 | 显示全部楼层
ZHAOBAO511 发表于 2021-12-2 08:56
您好,TCP心跳机制是一分钟吗?就是我设备必须一分钟一次吗?MQTT可以设置为18小时,ONENET也要半个小时 ...

MQTT 和onenet的心跳和TCP长连接的心跳不同哦
一个是确认设备活着
一个是确保TCP不断开

出300入477汤圆

发表于 2021-12-2 18:59:23 来自手机 | 显示全部楼层
ZRYBLOG 发表于 2021-12-2 17:21
MQTT 和onenet的心跳和TCP长连接的心跳不同哦
一个是确认设备活着
一个是确保TCP不断开 ...

如果是在公网上使用,最重要的限制因素是中途的那些NAT。你通迅的两端允许最长半个小时发个心跳,但是路上有个NAT只要你一分钟没有数据就删掉你的连接。那你说你怎么办?是按半小时还是按一分钟?

出0入0汤圆

发表于 2021-12-2 19:39:30 | 显示全部楼层
都是IPV4 NAT映射老化时间惹的祸(IPV4的NAT映射是由于公网资源有限而引入的),所以:1.维持IPV4 NAT映射不被老化回收;2.绕过(规避)NAT映射机制。

出300入477汤圆

发表于 2021-12-2 19:57:35 来自手机 | 显示全部楼层
修电筒的老王 发表于 2021-12-2 19:39
都是IPV4 NAT映射老化时间惹的祸(IPV4的NAT映射是由于公网资源有限而引入的),所以:1.维持IPV4 NAT映射 ...

当年2G网络用1分钟的踢人间隔,想给自己节约资源,赶紧把不用的人踢掉。结果适得其反,大家就是为了保持连接啊,你多久踢人,我就为了不被踢,用更短的间隔发心跳,反而给基站带来更大的负担。
这是个双输的选择

出0入0汤圆

发表于 2021-12-2 20:00:46 | 显示全部楼层
redroof 发表于 2021-12-2 19:57
当年2G网络用1分钟的踢人间隔,想给自己节约资源,赶紧把不用的人踢掉。结果适得其反,大家就是为了保持 ...

是的,后来就有APN了,不过运营商要收费。

出0入0汤圆

发表于 2021-12-3 14:15:53 | 显示全部楼层
redroof 发表于 2021-12-2 18:59
如果是在公网上使用,最重要的限制因素是中途的那些NAT。你通迅的两端允许最长半个小时发个心跳,但是路 ...

一个是APN
一个是软件上做一个自适应,从一个比较长的心跳间隔开始,如果断线几率太高,就会缩减心跳时间。
不过实际应用中我一般都定个30S,软件上的自适应基本算是个冗余措施

出300入477汤圆

发表于 2021-12-3 15:20:15 | 显示全部楼层
ZRYBLOG 发表于 2021-12-3 14:15
一个是APN
一个是软件上做一个自适应,从一个比较长的心跳间隔开始,如果断线几率太高,就会缩减心跳时间 ...

想简单一点只要小于一分钟以内就行。我还没见过踢人间隔短于1分钟的网络。

出0入16汤圆

发表于 2021-12-3 22:01:14 | 显示全部楼层
我用的是1分钟或者2分钟。TCP长连接没心跳不行的。如果串口做得不好有数据干扰那就是程序要改的问题。不能本末倒置
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 21:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表