应用服务端线程问题。(100分)

  • 主题发起人 主题发起人 china359
  • 开始时间 开始时间
C

china359

Unregistered / Unconfirmed
GUEST, unregistred user!
当应用服务端的数据模快使用aparment,multiple instace时,delphi就会自动的为每一个连结的客户端线程建立一个服务线程吗?
还是要在客户端程序上,或应用服务器的程序上作另外的程序编写?
 
是的。不用另外写。
 
不用另外写的话,假设客户端有100个,每一个客户都同时向服务器提出要求,而每一个要求都需要服务器化一秒钟的时间完成。那么当第100个客户被服务器服务时,要等待99秒后吗?
 
可以通过负载平衡解决
应用服务的多进程的模式解决
看一看李维的多层技术的书吧
 
就是這樣.
 
to Supermay:
如何才能应用应用服务器的多进程的模式解决?
 
的确是这样,不过你可以通过一定的方法避免这种情况出现。例如使用无状态对象,使用各种Pooling等。
 
是的,会自动建立。而且每次会重新建立线程。如果你要提高效率,就要考虑在服务器端写一个线程池,DELPHI中有一个例子。在DEMO下
 
initialization
TComponentFactory.Create(ComServer, TRDataModule,
Class_RDataModule, ciMultiInstance, tmApartment);
以上是多线程的方式,每客户端一个服务线程
initialization
TComponentFactory.Create(ComServer, TRDataModule,
Class_RDataModule, ciSingleInstance, tmApartment);
以上是单线程的方式,所有客户端一个服务线程
 
你所提的问题是一个效率问题,而影响效率的因素是多方面的,你可以在其他方面取得一些突破,对于线程的限制,因为COM/DCOM中,服务器产生的线程超过30个时,服务器的效率就会明显下降(我有体会,李维书中说的),所以你如果用户超过100的话,应该考虑用若干台服务器做负载平衡和缓冲池技术等。
 
采用COM+,使用COM+的对象POOL。这样就不需要100个客户端就要100个服务器线程。
当然,这时候就需要是无状态模式。
 
我用neutral,multiple instace时,线程好象不随客户端变化。
这正常吗?
 
无状态的,唉,没深究过,不过哥们写的支持几百个客户没有问题,多了就不知道啦
 
按默认配置好了,用不着考虑那么多
每连接一个客户端,服务器会自动创建一个线程提供服务
 
可是,为什么多客户端同时调用一个接口时会发生共享冲突?
在应用服务器中定义了一个接口,其中使用数据控件ADOQuery1:
ADOQuery1.Close;
ADOQuery1.SQL.Text:='select * from xxxx';
ADOQuery1.Open;
当有多个客户端同时调用该接口,就会发生ADOQuery1的访问冲突问题,如:不能在打开的数据集执行SQL.Text附值等。
建立远程模块选择的是:
Instancing:Multiple Instance;
Threading Model:Apartment;
为什么没有体现多线程呢?
需要特别设置吗?如何设置??
使用DCOM。
 
后退
顶部