最近我在使用 Midas 开发一个项目。
服务器端用TRemoteDataModule,用 MultiInstance, Apartment类型,
客户端使用TSocketConnection进行连接。现在存在以下疑问,请大家赐教 。1、使用该方式的三层软件,服务器能最大支持的终端数量,能有多少?
2、为了提高服务器的终端并发数量,可以做哪些方面的优化?

解决方案 »

  1.   

    1、Socket下要使用Borland的代理软件,这大家都是知道的,理论上设多少并发就可支持多少,但实际可支持并发数是受多种因素影响的,如内存、CPU、单个客户端通信量等等,没个定数的。最近才上了一堂测试课程,学到了一些新的理念:想要知道真实结果,就必须要做系统的压力测试。实践出真知啊!
    2、优化方面有点思路,仅供参考。
    1)如果每个客户端,是直接连接TRemoteDataModule的话,那就不太优化了,服务器资源占用多,TRemoteDataModule对象无法共享,等等。如果在TRemoteDataModule前面,加一个COM对象做连接代理,使用MultiInstance, Apartment类型,而TRemoteDataModule,选用中立线程模式,安装在COM+下,充足利用共享池,即时激活等新特性。李维大师的书《Delphi.5.X.ADO.MTS.COM+高级程序设计篇》讲得比较清楚。
    2)就是在软件设计上了,原则就是尽量保证数据包在网络上的传输量最少了,另外传输频度也要适量哦。
      

  2.   

    李维大师的书《Delphi.5.X.ADO.MTS.COM+高级程序设计篇》我也读过好几遍了,大概的理论还是
    知道一些,但是,真正能够做出的服务器能支持的终端数量,我还一直在疑惑?能有多少?
      

  3.   

    1)一般中小型应用,不用考虑那么详细吧
    2)控件网络通信数据量,比如一张表有几百万条数据,应尽量避免使用SELECT * FROM 表 这种操作
      

  4.   

    做com组件,注册到组件服务,然后采用socket连接,至于连接数据要看硬件要求吧
      

  5.   

    scktsrvr做为服务的话效果不是太好,如果你使用的是DELPHI6中带的scktsrvr的话可能还会出现死机!建议使用BDS2006中的scktsrvr做为服务,效果还可以。
    我现在最大支持的终端数量是200个左右,并发进程应该在50个左右没有出现什么问题,工作良好。
    另外再有一点如果你使用ADO的话,尽量将ADO访问组件的CacheSize设置为100左右,这样性能好一些。其它的你应该清楚吧。
      

  6.   

    1.可以参考Demos\DelphiWin32\VCLWin32\MIDAS\Pooler下的例子.
    2.理论上最大的终端数量是2000左右,想突破这个限制不容易.因为一个终端连接服务器就要创建一个服务线程.而windows在一个进程内最大的线程限制是2000左右.所以是windows的限制.不过可以考虑创建多个应用服务器实例,然后做负载平衡来突破这个限制.