英雄无敌5变态地图:Delphi2010中DataSnap高级技术(4)—TCP keepAlive和Keep...
来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 06:58:59
Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解 收藏
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 命令查看接下来我们将结合Delphi2010 DataSnap技术使用心跳包功能!敬请关注 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunstone/archive/2009/12/16/5016363.aspx
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 命令查看接下来我们将结合Delphi2010 DataSnap技术使用心跳包功能!敬请关注 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunstone/archive/2009/12/16/5016363.aspx
Delphi2010中DataSnap高级技术(4)—TCP keepAlive和Keep...
Delphi2010中DataSnap高级技术(4)—TCP keepAlive和Keep...
Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分...
Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用...
Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用...
Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lif...
Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端...
Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描...
Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端...
Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力 - ...
Sockets和TCP/IP
卫星TCP/IP数据传输技术
document类的用法归总 - keep on - JavaEye技术网站
手排车高级驾驶技术
摩登舞高级舞步技术——术语与示范
高级技术分析—交易系统的原理、构建与实战
进阶教程:高级曝光技术
自动档汽车高级驾驶技术
五域论湛《操盘技术》高级教程
文章 IPv4、TCP和UDP的校验和计算
带宽时延乘积 和 tcp窗口大小的设置
TCP/IP协议里没有子网掩码和默认网关选项
基于Socket的UDP和TCP编程介绍
乒乓球击球技术中击球落点和线路作用