Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
来源:互联网 发布:linux内核调用shell 编辑:程序博客网 时间:2024/05/22 11:46
Delphi2010中DataSnap,如果客户端异常掉线或拔掉网线,那么在服务端会留下一个TCP连接,这个连接会变成死连接(经过测试,如果windows的TCP保持连接禁用的话,三个小时该死连接还不消失)。如果大量客户端并发,出现的死TCP连接过多,服务器内存和端口将会增加,直到占满服务器的端口和耗尽内存为止。如果这样的话,服务器无法健壮稳定的运行。
大家可以另开线程来监控客户端连接,但是今天要给大家讲解的不是这个方法,而是使用TCP协议自带的心跳包功能解决这个问题。
大家先了解一下 TCP keep-alive原理
一个TCP keep-alive 包是一个简单的ACK,该ACK包内容为一个比当前连接sequence number 小于一的包。主机接受到这些ACKs会返
回一个包含当前sequence number 的ACK包。
Keep-alives一般被用来验证远端连接是否有效。如果该连接上没有其他数据被传输,或者更高level 的 keep-alives被传送,keep-alives 在每个KeepAliveTime被发送。(默认是 7,200,000 milliseconds ,也就是2个小时)。
如果没有收到 keep-alive 应答,keep-alive 将在每 KeepAliveInterval 秒重发一次。KeepAliveInterval 默认为1秒。如 Microsoft 网络功能中很多部分中采用的 NETBT 连接,更常见的是发送 NETBios keep-alives,所以,在 NetBios 连接中通常不发送TCP keep-alives。
TCP保持连接默认被禁用,但是微软Sockets应用程序可以使用SetSockOpt函数去启用他们。
请看下面的类
type
TCP_KeepAlive = record
OnOff: Cardinal;
KeepAliveTime: Cardinal; // 多长时间(ms)没有数据就开始send心跳包
KeepAliveInterval: Cardinal // 每隔多长时间(ms)send一个心跳包,发5次(系统值)
end;
KeepAliveTime: TCP连接多长时间(毫秒)没有数据就开始发送心跳包,有数据传递的时候不发送心跳包
KeepAliveInterval: 每隔多长时间(毫秒)发送一个心跳包,发5次(系统默认值)
如果客户端网络中断,服务器系统发送心跳包后,服务器会自动解除TCP连接。这一点,大家可以使用 netstat -p -tcp 命令查看
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunstone/archive/2009/12/16/5016363.aspx
- Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
- Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
- Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
- [转]Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
- Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
- DataSnap-TCP keepAlive和KeepAliveInterval参数详解
- Delphi2010中DataSnap高级技术
- Delphi2010中DataSnap高级技术
- Delphi2010中DataSnap高级技术
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- iReport与JasperReport中如何支持文支持显示
- 基于简易多通道虚拟示波器的技术研究
- IE里F5和Ctrl+F5区别是什么?
- 询问对话框
- VC2005用不惯呀....
- Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
- Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用
- Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力
- Task Scheduler 对win7中任务计划的编程
- linux文件传输方法
- Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明
- 关于Record类型RTTI反射的用途和方法
- 动态追加div,运用replace实现全部替换
- 编辑框