delphi datasnap 心跳包
来源:互联网 发布:美津浓跑鞋矩阵 编辑:程序博客网 时间:2024/05/22 07:46
为了能让我们的服务程序更加稳定,有些细节问题必须解决。就如上一讲中提到的客户端拔掉网线,造成服务器上TCP变成死连接,如果死连接数量过多,对服务器能长期稳定运行是一个巨大的威胁。
另外,经过测试,如果服务器上有TCP死连接,那么服务程序连接数据库,也会产生那个一个死连接。这样的话,给数据库服务器也造成威胁。所以,服务器程序编写的好坏,直接影响系统的稳定性!
如何解决TCP死连接的问题,有多种方法,其中最有效的就是心跳包技术。
我们在DSServer的OnConnect事件中加入心跳包代码
uses IdTCPConnection,IdWinsock2
........
type
TCP_KeepAlive = record
OnOff: Cardinal;
KeepAliveTime: Cardinal;
KeepAliveInterval: Cardinal;
end;
........
procedure TServerContainer1.DSServer1Connect
(DSConnectEventObject: TDSConnectEventObject);
var
Val: TCP_KeepAlive;
Ret: DWord;
ClientConnection: TIdTCPConnection;
begin
ClientConnection := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);
Val.OnOff := 1;
Val.KeepAliveTime := 5000;
Val.KeepAliveInterval := 3000;
WSAIoctl(ClientConnection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,
@Val, SizeOf(Val), nil, 0, @Ret, nil, nil);
end;
观察上述代码,我们把心跳包放到服务端上执行,如果服务器的某个TCP连接在5秒钟没有收到数据,将会发送向对端发送心跳包,间隔3秒钟,连续发送5次(参数详解见上一讲高级技术4)。如果5次以后对端还没有应答,服务器将结束该TCP连接。TCP的连接可以使用 netstat -p tcp 命令查看。
上述代码还不能直接使用,还需要引用一个winsock2.pas
请到
http://download.csdn.net/source/2921601 下载,下载后需要直接添加文件并引用文件即可
当该TCP结束后,delphi编写的服务程序会自动结束和数据库的连接。我用的是FireBird数据库,大家可以使用命令查看 SELECT MON$USER, MON$REMOTE_ADDRESS,
MON$REMOTE_PID,
MON$TIMESTAMP
FROM MON$ATTACHMENTS
现在服务器的tcp死连接和数据库的死连接都清除了,我们的系统将能长期稳定的运行。
- delphi datasnap 心跳包
- 关于Delphi XE DataSnap心跳包
- delphi xe2下的datasnap心跳包设置
- datasnap 2010 心跳包,连接断开处理
- delphi心跳包
- 三层Datasnap 服务端验证以及心跳包技术
- delphi 接收心跳包怎么写
- delphi idtcpclient和idtcpserver的心跳包
- delphi中 socket 心跳包的实现
- DataSnap-建立稳定服务程序之TCP心跳包的使用
- Delphi dataSnap中TreamToJson
- delphi datasnap 中间件
- Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用
- Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用
- Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用
- 心跳包
- 心跳包
- 心跳包
- enum知多少【java 5.0 tiger】
- 使用GridLayout布局时的一个小技巧(margin)
- Struts2得到Request和Session
- 激活博客
- ORACLE学习笔记1_启动过程
- delphi datasnap 心跳包
- PCB治具的设计
- Chapter 10 -- SystemC From Gound 读书心得
- [面试] Java 对象的克隆
- 关于PCHAR所占字节大小的问题
- Nginx 使用总结
- js特效(弹出窗口)--整死我了(3)
- Train Problem I
- JScrollPane设置滚动条自动到最下(或最右)