我写了一个简单的三层结构程序,客户端用户也不多,同时在线最多也就十个人左右,数据量也不大,不知为何,中间层老是没有规律的死机,几天可能死一次,有时早上来有一个用户连接,可能就不行了,很没规律,请问高手怎么回事儿?可能是哪方面的原因?用socket连接
而且我在客户端还写了
try
SocketConnection1.Connected := False;
SocketConnection1.Address := '192.168.0.1';
SocketConnection1.Connected := True;
except
showmessage('连接服务器出现错误');
Application.Terminate;
end;但是客户端也不报连接错误,客户端也好像死在那儿
而且我在客户端还写了
try
SocketConnection1.Connected := False;
SocketConnection1.Address := '192.168.0.1';
SocketConnection1.Connected := True;
except
showmessage('连接服务器出现错误');
Application.Terminate;
end;但是客户端也不报连接错误,客户端也好像死在那儿
写中间层时把 Adoconnection放到 RemoteDataModule 上,这样一来,数据库连接就在 RemoteDataModuleCreate 里写,可是每次一当有客户端连接时,就进行一次数据库连接。
我是这样写的,不应该这样吗?有什么更好的方法
1。如果我把ADOConnection1和ADODataSet1放到DataModule中,然后DataSetProvider1还在远程数据模块中,问题依旧。到第10个的时候就不能在运行可户端程序了。2。我把我在RemoteDataModule的create中的一个函数MainForm.LogedClientCount(1)取消掉,就没事了,这个函数是从主窗体中来的,就是为了计算当前的可户数。起原形是这样的
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
inc(i);
if i =1 then
HidenTheForm;
Timer1.Enabled := False;
end;但是在里的其他的代码就没有问题。当时我用223个可户登陆,没有任何问题。3。为了还要统计用户数量,我把这个函数的放的位置换了一下,放大如果用户密码用户名正确了才记数,我用20多个用户登陆没有出现任何问题。总结:所以我猜想是因为哪个函数的原因,具体为什么在远程数据模块中不能调用主窗体中声明的过程。我也没有搞明白原因呢。
如果你的值为10,那么就是这的问题了,有时用户非法断开连接,它的刷新没那么快的,其它用户当然就连不上了("有时早上来有一个用户连接,可能就不行了")2:如果不是1的原因,看一下你的服务器在无响应时的CPU占用情况,如果很高,那么就要检查下你的代码了