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