我写了一个简单的三层结构程序,客户端用户也不多,同时在线最多也就十个人左右,数据量也不大,不知为何,中间层老是没有规律的死机,几天可能死一次,有时早上来有一个用户连接,可能就不行了,很没规律,请问高手怎么回事儿?可能是哪方面的原因?用socket连接
而且我在客户端还写了
  try
    SocketConnection1.Connected := False;
    SocketConnection1.Address := '192.168.0.1';
    SocketConnection1.Connected := True;
  except
    showmessage('连接服务器出现错误');
    Application.Terminate;
  end;但是客户端也不报连接错误,客户端也好像死在那儿

解决方案 »

  1.   

    更新你的scktsvr给Fix 2的版本。如果要,我有。[email protected]
      

  2.   

    请检查你的中间层代码,,,是不是你为每个客户在REMOTDATAMODEL里都创建了一个数据库连接!!!
      

  3.   

    是不是在主FROM上写了exit之类的代码我觉得socket不应该搞死机啊
      

  4.   

    是不是你为每个客户在REMOTDATAMODEL里都创建了一个数据库连接!!!不太明白你的意思
      

  5.   

    TO cnssk(小柯) :
    写中间层时把 Adoconnection放到 RemoteDataModule 上,这样一来,数据库连接就在 RemoteDataModuleCreate 里写,可是每次一当有客户端连接时,就进行一次数据库连接。
      

  6.   

    To Erice(白雪公猪) :
    我是这样写的,不应该这样吗?有什么更好的方法
      

  7.   

    难怪,,,你可以共享一个数据库连接!!!,你这样在创建RemoteDataModule会很慢,对系统资源占的比例也大!!!
      

  8.   

    将数据库连接放在一个独立的DataModule里,RemoteDataModule引用这个DataModule,共享数据连接。可以减少CPU占有量!!!
      

  9.   

    RemoteDataModule根据客户端请求连接数,为每个客户端创建一个新的线程供单独使用!!!!你的客户端有10多个,不是就有10个数据库连接了吗???
      

  10.   

    可以在RemoteDataModule释放的实践里关闭数据库连接。
      

  11.   

    我现在先打个socket server的补丁测试一段吧
      

  12.   

    我现在也在开发三层的,也除了楼主同样的问题。当第十个用户登陆时,服务器就不在增加客户数量,而且处在死的状态。客户端程序也运行不起来了。我的数据库连接也是在RemoteDataModule中。
      

  13.   

    我有点同意 Erice(白雪公猪)的说法。我修改一下看看。
      

  14.   

    我找了找我的三层数据库的问题:是这样的:
      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多个用户登陆没有出现任何问题。总结:所以我猜想是因为哪个函数的原因,具体为什么在远程数据模块中不能调用主窗体中声明的过程。我也没有搞明白原因呢。
      

  15.   

    1:查看一下你的Socket Server中的Thread Caching中的设置值(默认为10),这个值为最大充许连接中间层服务器的人数,改大一些
      如果你的值为10,那么就是这的问题了,有时用户非法断开连接,它的刷新没那么快的,其它用户当然就连不上了("有时早上来有一个用户连接,可能就不行了")2:如果不是1的原因,看一下你的服务器在无响应时的CPU占用情况,如果很高,那么就要检查下你的代码了
      

  16.   

    Socket Server指scktsrvr.exe