优点:
-
简单直观:这种方式非常直接,易于实现和理解。
-
快速反馈:一旦发现问题,可以立即采取相应的措施,如尝试重新连接或者执行其他恢复操作。
注意事项:
-
对实时性要求高:这种检测方式能够迅速发现网络问题,但并不能提供详细的网络性能数据。如果需要更详细的性能分析,可能需要使用其他更复杂的监控手段。
-
需要一定的网络流量:发送心跳包会占用一些网络带宽,这在高速网络上可能不是问题,但在带宽有限的情况下可能会有影响。
-
无法确定具体问题:它可以指示网络连接问题,但无法提供故障的具体原因。可能需要其他方式来确定问题的具体原因,如网络拥塞、丢包率等。因为心跳包指示监测网络连接的存活性。高延迟和轻度地丢包会影响网络性能和程序的响应时间,但是不会导致心跳包丢失。
-
不一定适用于所有场景:在某些复杂的网络环境下,可能需要结合其他监控手段,如实时延迟测量、丢包率监测等。
流程
-
服务器端发送心跳包:
- 在服务器端,以固定的时间间隔10ms一帧,发送一个特定类型的数据包到车端。
-
车端接收并回应心跳包:
- 在车端,你需要监听服务器端发送的数据包,一旦接收到心跳包,就立即回应服务器,以表示连接是活跃的,并在服务端控制台输出“车端已连接”。
-
设置超时阈值:
- 在服务器端,设置一个超时阈值,如果在50ms间内没有收到车端的回应,就认为连接出现问题。
-
处理超时情况:
- 当超时发生时,继续心跳包监测,心跳包监测不要停,把超时的信息打印到控制台并写入输出的heartbeat文档里。
-
记录状态和日志:
- 可以在服务器端记录每次心跳包的发送和接收情况,以便后续分析和追踪网络连接的稳定性。将日志输出至控制台,同时保存文档到当前目录,当程序开始运行时,会删掉或者说覆盖掉上次输出的文档heartbeat.txt。
-
可选的扩展:
- 根据具体的需求,你可以扩展心跳包的功能,比如添加更多的状态信息,或者结合其他监控手段来做更详细的网络状态检测。
- 唯一标识符:
- 第一辆车ID:vehicle_1 。ip: 10.10.1.160
- 第二辆车ID:vehicle_2 。ip: 10.10.1.170
- 第三辆车ID:vehicle_3 。ip: 10.10.1.180
- 控制台ip:10.10.1.189
要文档输出的内容,文档叫做timeDifferences.txt。
当程序开始运行时,会删掉或者说覆盖掉上次输出的文档timeDifferences.txt。
如果遥控台收到心跳包:
Received from “车的ID”: Heartbeat response,每一帧收到包的当前系统时间,收到当前帧与收到上一帧的时间差。
如果遥控台没收到:
Timeout - no heartbeat response from “车的ID”
例如:
Received from vehicle_1: Heartbeat response,2023-10-24 15:53:59.436,3
Timeout - no heartbeat response from vehicle_3
服务器端需要控制台输出 :
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Timeout - no heartbeat response from vehicle_3
Timeout - no heartbeat response from vehicle_2
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Timeout - no heartbeat response from vehicle_3
Timeout - no heartbeat response from vehicle_2
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
一般服务器端如何记录每次心跳包的发送和接收情况?
日志流处理流程
1、logging四大组件介绍
logging模块包括Logger,Handler,Filter,Formatter四个部分。
Logger 记录器,用于设置日志采集。
Handler 处理器,将日志记录发送至合适的路径。
Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter 格式化器,指明了最终输出中日志的格式。
————————————————
将日志输出至控制台,同时保存文档到当前目录,当程序开始运行时,会删掉或者说覆盖掉上次输出的文档heartbeat.txt。
我的项目目前情况:
无人驾驶项目,服务端是遥控台,客户端是三台车。
我对心跳包监测程序的理解是,遥控台程序只要启动就开始udp发心跳包,并实时监控接收来自车端返回的心跳包,只要收到车端返回的心跳包就与该车建立连接,之后如果超时,就与该车断掉连接。车端一启动就开始监控自己端口是否收到心跳包,只要收到就回传心跳包。
我计划用三个代码文件,RemoveControlServer.cs,VehicleClient.cs,config.json。
分成两个项目分别放到遥控端和车端。
RemoveControlServer.cs和config.json放到遥控端。
VehicleClient.cs和config.json放到车端。