各位,ScktSrvr.exe的问题,有什么办法么?(300分)

  • 主题发起人 主题发起人 kkkchenA
  • 开始时间 开始时间
K

kkkchenA

Unregistered / Unconfirmed
GUEST, unregistred user!
因为Dcom发布时候比较麻烦,相信很多人都选择了使用Socket的方式。
但是,用Socket的话,就要运行ScktSrvr.exe
ScktSrvr.exe真的是一个会找麻烦的家伙,每隔几天就罢工一次。
特别是当在线用户超过200的时候,ScktSrvr.exe一定会挂掉。
后来,把用户分区,搞两台机器运行ScktSrvr.exe,但是运行时间长了,还是一样会死掉。
我用的是D2006自带的ScktSrvr.exe 超时时间设定为10分钟。
对于这样的问题,有什么好的解决办法么?
 
可以采用其他Midas控件,第三方的控件有很多,如’阿思塔‘
 
看看一些财务软件吧
 
你用什么操作系统做服务器?
 
服务器是win 2003 单cpu 1G内存
 
正常时候的CPU,内存的早用率很正常。但是某个时候ScktSrvr就停止响应了。重新启动它又可以正常工作。
 
也许改用Asta会是一个好方法,我测试一下。
 
一般来说同时在线用户超过200个的话不适合使用scktsrvr的了,因为它为每个连接启动一个服务线程,而windows对一个进程内的线程数有一个限制,超过这个限制则会导致进程崩溃,这个限制大概就是200多一点。
你可以尝试一下设置负载平衡,拖一个tsimpleobjectbroker控件到socketconnection所在的容器,设置一下它的objectbroker属性。
至于这个负载平衡管不管用,我不得而知,因为我也没有用过。
 
现在是分区了,每个连100个,情况好点没那么容易死了,但是也还是一样会死掉。
所以估计用了负载平衡以后,也好不到那里去。
 
你到http://www.2ccc.com/article.asp?articleid=1665下载那个Borland Socket Server的补丁试试,我对照过D2006和这个补丁的修改的部分,D2006绝大部分已经按补丁的方法修复了,但超时那里好像还没有按照补丁的方法修改过,试试加上超时的限制
 
关注,我正在开发的系统用的也是socket server。还没开发完,不知效果如何?
 
怕什么,再做个小程序,只干一件事,每天没人的时候把那个ScktSrvr.exe给KILL了,然后再启动这个程序就行了,要不写到程序中去也行
 
D2006的那个,当超时时,会把超时的连接踢掉的。
D2005的不会踢掉。这个前段时间做过测试。
 
asta效果要好些,但对程序要改动挺大,如果你已开发完成了的话。
 
我用asta3做了一下测试。
我继承了一个的线程类来做测试,里面建立一个TAstaClientSocket,一个TAstaClientDataSet对象,线程事件中,每隔1秒去读10条数据回来。
我建立了10个这样的线程做测试,服务器使用Asta知道的ADO服务器。
但是,我运行我的代码的时候它报一个SmartWaite的异常,说应该在主线程里面进行同步。
于是我,修改了一下我的代码,通过主线程同步调用我的线程函数。但是程序一运行,服务器就死锁了。
有没有朋友对Asta做过测试,测试代码应该这么写?
线程的代码。
procedure TAstaTestThread.Execute;
begin
{ Place thread code here }
while Truedo
begin
Sleep(3000);
Synchronize(GetDate);
Sleep(100);
if not Active then
Break;
Sleep(100);
end;
end;

取数据的函数
procedure TAstaTestThread.GetDate;
begin
FDataSet.Close;
FDataSet.SQL.Clear;
FDataSet.SQL.Add('SELECT TOP 10 * FROM bb');
if Active then
FDataSet.Open;
end;
 
听扩种。。。。
 
结帐了。
 
多人接受答案了。
 
后退
顶部