客户端非正常断线,服务器的资源释放问题(200分)

  • 主题发起人 主题发起人 apiao
  • 开始时间 开始时间
各位打侠:
我的问题已经贴了一个半月了。难道各位真的解决不了吗?
现在的人气是越来越旺,可问题是越来越水了。。。
 
联众实时检测非常快,是不是可以使用socke建立一个应答来检测!?
 
如果你客户端比较繁忙你正好可以利用这一点,如果长时间没有收到客户端的请求就切断连接释放资源!
不过客户端就比较繁每次操作前都要检查连接情况,如果连接被断开了就需要重新连接!
 
谢谢,贴了近三个月。各位真是难得:
这个问题的关键是服务器资源释放的问题。
如何释放?????
 
你用的是MIDAS的ScktSrvr和TSocketConnection不?
修改ScktSrvr.dpr->ScktMain.pas
client的意外断开,Server不能侦听到中断,以致一直block 一个clientThread,我试过可以通过PostThreadMessage(Thread.ThreadId, WM_USER, 0, 0),发一个消息给线程,在ClientThread因为它是创建了一个消息队列,并且它的MsgWaitForMutipleObjects是可以侦听到消息,所以你可以稍微修改一下server的源码,加一些小处理就可以了。
server加一下TTimer,时间为60000ms,一分钟吧先,每分钟,server去postThreadMessage给每个ClientThread,然后在
RefreshClientTimer是一个TTimer, interval=60000(一分钟)
procedure TSocketForm.RefreshClientTimeTimer(Sender: TObject);
var
I: Integer;
Thread: TSocketDispatcherThread;
begin
RefreshClientTime.Enabled := False;
try
for I := 0 to ConnectionList.Items.Count - 1do
begin
Thread := TSocketDispatcherThread(ConnectionList.Items.Item.Data);
PostThreadMessage(Thread.ThreadID, WM_USER, 0, 0);
end;
finally
RefreshClientTime.Enabled := True;
end;
end;

ClientExceute中:
//在这个case中
WAIT_OBJECT_0 + 1:
begin
while PeekMessage(msg, 0, 0, 0)do
...
if 得到当前时间 - 客户端程序最后响应时间 > 某个时间(自己设) then
ClientSocket.Connected := False//就断开它。
end;
其它的相同吧。
如果是其它DCOM,可以在MainForm中用一个TStrings得到客户端的RDM最后响应时间,可能比较
麻烦,就是在RDM中在每个方法中加入UpdateLastReponseTime,记录最后响应时间。然后MainForm
也加入一个TTimer像上面的做法一样。
不知行不行,我只是用过TSocketConnection,其它的没怎么用。
 
可惜我用的不是TSocketConnection,是DCOM。
谢谢
我在好好研究研究
 
研究后,告诉我们!
 
对这个问题很感兴趣,想先看看各位高手的意见,学习学习。
 
热切关注!
 
这个问题一放半年多,客户的网络稳定了许多
所以没再有什么麻烦。但这毕竟不是解决之道。
希望各位高手能解决这个问题。
我再加300分
 
是cpu占用,并不是正在运行(cpu有多种状态),只有使用了核心资源,才是真正使用。
 
终于出来了
这个困扰我半年多的问题终于解决了。
论坛的各个类似的贴子也可以告一段落了。
感谢大家的支持,我准备将答案整理整理,送给关注的朋友
 
效率好差!都半年了:((
 
什么时候整理?请赶快,我也被折磨死了。特别是99%的问题。
 
MTS模块就可以解决这个问题吗?
 
热切关注!
 
to apiao:
你可以把你解决的方法发给我一份吗?都急死我了。
zcm1975117@163.com
 
后退
顶部