- 12
- 0
- 约3.26千字
- 约 5页
- 2023-08-06 发布于上海
- 举报
TCP 连接有效性检测方法
在写 TCP 服务的时候经常需要面对的问题就是如何知道一个 TCP 连接当前是否有效, 但这个问题对很多初入门的同学来说是很困惑的,主要原因是当对方关闭连 接后,另一方无法有效的知道;对于同步操作来说可以通过设置操作超时来解决,但异步操作则没有这样方便的了,那只能等 keepalive 的检测完成引发异 步回调了。
那在编写应用的时候一般通讯什么方式来检测连接的有效性呢 ?解决方法一般有两种一种是设置 TCP 的 keepalive 时间,另一种则是通过 Ping,Pong 的方式来实现。前者相对比较简单通过 socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null)方法设置即可,以下主要但要通过 Ping,Pong 的方式来实现应用层面的 TCP 连接有效性检测。通过Ping,Pong 来处理有两种方式:服务器主动和被动。
主动
这种方式主要是由服务器发起,然后由客户端响应;服务检测每个连接 Pong 响应情况, 如果连接在一段时间内没有 Pong 回应则把相应连接关闭并处理相关会话资源。
被动
这种方式由 Client 发起 Ping 然后由服务端回应 Pong,如果 Client 是同步操作的话其实服务端是不需要应答 Pong 包。服务端检测每个连接最近的Ping 时间,如果超过一段时间没有Ping 的情况把相应连接关闭并处理相关会话资源。
模式选择
从上面的两种方式来看显然是被动模式更节省服务器资源,如果采用主动的话服务器还必须启用一个定时器对现有在线接进行发送 Ping 操作;被动模式就完全不需要了,只有接收到客户端 Ping 回应一个 Pong 操作。
检测算法
一般情况会用一个定时器隔一段时间对所有Client 检测一次,看对应的 Ping 时间是否超时, 如果是则直接关闭和释放资源。但这样是要对所有连接进行扫描,其实在应用中只有很小部 分连接是无效的,如果针对所有在线连接进行一 个扫描那的确一个比较花成本的工作。为了解决全扫描的情况,可以采用一种简单的算法 LRU,通过 LRU 算法在检测的时候只要扫冷区数据即可,这样就可以达 到只扫描 Ping 超时的连接。LRU 具体处理结构如下:
以下给出相关 LRU 实现的 c#版本代码:
/// summary
/// 基于 LRU 算法的连接检测
/// /summary
public class LRUDetect:IDisposable
{
/// summary
/// 构建检测器
/// /summary
/// param name=timeout超时时间以毫秒为单位/param public LRUDetect(int timeout)
{
mTimeout = timeout;
mTimer = new System.Threading.Timer(OnDetect, null, mTimeout, mTimeout);
}
private int mTimeout;
private System.Threading.Timer mTimer;
private LinkedListNode mLinkedList = new LinkedListNode();
/// summary 更新连接/summary
/// param name=connection连接信息/param public void Update(IConnecton connection)
{
lock (this)
{
LinkedListNodeLRUDetect.Node node = connection.Node; if (node != null)
{
}
else
{
node.Value.LastActiveTime = Environment.TickCount; mLinkedList.Remove(node); mLinkedList.AddFirst(node);
node = mLinkedList.AddFirst(new Node()); node.Value.LastActiveTime = Environment.TickCount; node.Value.Connection = connection; connection.Node = node;
}
}
}
/// summary
/// 删除连接
/// /summary
/// param name=connection连接信息/param public void Delete(IConnecton connection)
{
lock (this)
{
LinkedLis
您可能关注的文档
最近下载
- 中央电化教育馆函件.pdf VIP
- NB∕T 10891-2021 煤层气L型水平井钻完井设计规范.pdf
- 2025年金融风险管理师外汇期货合约特征与定价专题试卷及解析.pdf VIP
- 农业行业标准《ω-3多不饱和脂肪酸强化鸡蛋》 .pdf VIP
- 04CJ02 飞机库大门国标图集.pdf VIP
- 2025年一级建造师风险登记册在项目全生命周期中的应用专题试卷及解析.pdf VIP
- 综评 班主任操作手册2023版.pptx VIP
- 2025年无人机驾驶员执照应急响应计划审计专题试卷及解析.pdf VIP
- 2025年房地产经纪人市政配套设施(水、电、气、暖、通讯)勘察专题试卷及解析.pdf VIP
- 2025年信息系统安全专家零信任架构中的安全架构设计实战专题试卷及解析.pdf VIP
原创力文档

文档评论(0)