断网重连里面的长连接,短链接和心跳机制

最近工作是断网后重定向的工作机制的功能测试。在设备拿到gb号之后在平台链接,看在app上能不能拉到流,断网后看看能不能自己恢复or尝试重连接成功。gb号里面有一些mac地址和其他的信息,是符合国标标准的,设备只有在拿到国标号之后才能完成和app的连或者其他功能,相当于一张身份证。

在网络连接连接的测试里为了能看到离线时候的流,所以要连接串口,板子上的串口有三个脚,就是GND,RX和WX,对应接地、输出和输入,连接的时候在xshell里面选择一个新建一个串口的连接方式,然后板子插上可以正常输出非乱码的字符和可以读取键盘输入就算串口连接完成。

这里的断网测试分两种,一种是在PoE端断掉LAN口,还有一种在路由器端断掉WAN口,检查是不是能完成一些重定向和重新注册的功能。
这里涉及到两种协议,UDP和TCP。
在UDP的协议下,当断网的时候心跳机制会每隔30s发送一次报文,累计三次得不到服务器的回应就算要开始重定向(可以在一些json文件里面 自己定义心跳发送的时间间隔or累计次数)
里面的涉及到几种状态码,401 没有认证,302 重定向到服务器和200 OK,这也是重定向的要经历的三个步骤。
还有一种TCP协议的情况,和UDP同样有一些心跳机制,断开重连的方式也类似。

长连接是设备和与服务器通过三次握手建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P通信
短连接时是设备发送请求消息,服务器返回响应,一次连接就完成了。交易完毕后立即断开连接。此方式常用于一点对多点通讯。

短连接的操作步骤是:建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接

长连接的操作步骤是:建立连接——数据传输…(保持连接)…数据传输——关闭连接

三、长连接与短连接的使用时机:长连接:短连接多用于操作频繁,点对点的通讯,而且长连接数不能太多的情况。每个TCP连接的建立都需要三次握手,每个TCP连接的断开要四次握手。

如果每次操作都要建立连接然后再操作的话处理速度会降低,所以每次操作下次操作时直接发送数据就可以了,不用再建立TCP连接。

例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,频繁的socket创建也是对资源的浪费。

短连接:web网站的http服务一般都用短连接。因为长连接对于服务器来说要耗费一定的资源。像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。

试想如果都用长连接,而且同时用成千上万的用户,每个用户都占有一个连接的话,可想而知服务器的压力有多大。所以并发量大,但是每个用户又不需频繁操作的情况下需要短连接。总之:长连接和短连接的选择要视需求而定。

发送接收方式:

1、异步:报文发送和接收是分开的,相互独立,互不影响的。这种方式又分两种情况:异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接送。异步单工:接送和发送使用两个不同的程序来完成。

2、同步:报文发送和接收是同步进行,即报文发送后等待接送返回报文。同步方式一般需要考虑超时问题,试想我们发送报文以后也不能无限等待啊,所以我们要设定一个等待时候。超过等待时间发送方不再等待读返回报文。直接通知超时返回。

心跳机制
应用层协议大多都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线。

并传输一些可能必要的数据。使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议。

在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。

为什么需要心跳机制?
因为网络的不可靠性, 有可能在 TCP 保持长连接的过程中, 由于某些突发情况, 例如网线被拔出, 突然掉电等,

会造成服务器和客户端的连接中断. 在这些突发情况下, 如果恰好服务器和客户端之间没有交互的话, 那么它们是不能在短时间内发现对方已经掉线的.

心跳机制即可解决此类问题。

TCP协议的KeepAlive机制
默认KeepAlive状态是不打开的。

需要将setsockopt将SOL_SOCKET.SO_KEEPALIVE设置为1才是打开KeepAlive状态,

并且可以设置三个参数:

tcp_keepalive_time ,tcp_keepalive_probes , tcp_keepalive_intvl,

分别表示:连接闲置多久开始发keepalive的ack包、发几个ack包不回复才当对方已断线、两个ack包之间的间隔。

很多网络设备,尤其是NAT路由器,由于其硬件的限制(例如内存、CPU处理能力),无法保持其上的所有连接,因此在必要的时候,会在连接池中选择一些不活跃的连接踢掉。

典型做法是LRU,把最久没有数据的连接给T掉。

通过使用TCP的KeepAlive机制(修改那个time参数),可以让连接每隔一小段时间就产生一些ack包,以降低被踢掉的风险,当然,这样的代价是额外的网络和CPU负担。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值