读书人

使用midas开发过项目的兄弟进来讨论一

发布时间: 2012-03-07 09:13:51 作者: rapoo

使用midas开发过项目的兄弟进来讨论一下,会有收获的 :)
最近我在使用 Midas 开发一个项目。
服务器端用TRemoteDataModule,用 MultiInstance, Apartment类型,
客户端使用TSocketConnection进行连接。现在存在以下疑问,请大家赐教 。

1、使用该方式的三层软件,服务器能最大支持的终端数量,能有多少?
2、为了提高服务器的终端并发数量,可以做哪些方面的优化?


[解决办法]
1、Socket下要使用Borland的代理软件,这大家都是知道的,理论上设多少并发就可支持多少,但实际可支持并发数是受多种因素影响的,如内存、CPU、单个客户端通信量等等,没个定数的。最近才上了一堂测试课程,学到了一些新的理念:想要知道真实结果,就必须要做系统的压力测试。实践出真知啊!


2、优化方面有点思路,仅供参考。
1)如果每个客户端,是直接连接TRemoteDataModule的话,那就不太优化了,服务器资源占用多,TRemoteDataModule对象无法共享,等等。如果在TRemoteDataModule前面,加一个COM对象做连接代理,使用MultiInstance, Apartment类型,而TRemoteDataModule,选用中立线程模式,安装在COM+下,充足利用共享池,即时激活等新特性。李维大师的书《Delphi.5.X.ADO.MTS.COM+高级程序设计篇》讲得比较清楚。
2)就是在软件设计上了,原则就是尽量保证数据包在网络上的传输量最少了,另外传输频度也要适量哦。
[解决办法]
理论上讲可以支持255个应用程序服务器同时连接到数据库服务器,而客户端连接应用程序服务器的限制是客户端机器上的套接字句柄耗尽:(32位机)句柄 > 2148473647后死机(以上数据没有经过测试)。
[解决办法]
1)一般中小型应用,不用考虑那么详细吧
2)控件网络通信数据量,比如一张表有几百万条数据,应尽量避免使用SELECT * FROM 表 这种操作
[解决办法]
scktsrvr做为服务的话效果不是太好,如果你使用的是DELPHI6中带的scktsrvr的话可能还会出现死机!建议使用BDS2006中的scktsrvr做为服务,效果还可以。
我现在最大支持的终端数量是200个左右,并发进程应该在50个左右没有出现什么问题,工作良好。
另外再有一点如果你使用ADO的话,尽量将ADO访问组件的CacheSize设置为100左右,这样性能好一些。其它的你应该清楚吧。
[解决办法]
1.可以参考Demos\DelphiWin32\VCLWin32\MIDAS\Pooler下的例子.
2.理论上最大的终端数量是2000左右,想突破这个限制不容易.因为一个终端连接服务器就要创建一个服务线程.而windows在一个进程内最大的线程限制是2000左右.所以是windows的限制.不过可以考虑创建多个应用服务器实例,然后做负载平衡来突破这个限制.

[解决办法]
如果实现了连接池,理论上只要你的内存足够大终端数量可以是无数个,并发数量理论上最大能达5000左右,曾听说完成端口的并发数量能达5000左右,在实际应该中是不可能达到5000的,能有500的并发数量算实现的不错了

读书人网 >.NET

热点推荐