连接池的问题,请大侠帮忙!谢谢了!(50分)

  • 主题发起人 主题发起人 zqs10597249
  • 开始时间 开始时间
Z

zqs10597249

Unregistered / Unconfirmed
GUEST, unregistred user!
C:/Program Files/Borland/Delphi6/Demos/Midas/Pooler
delphi6自带的例子,里面的连接池单元
unit pooler;
TPooler = class(TAutoObject, IPooledRDM)
是不是只对一个IPooledRDM接口。
如果我现在一个类库里又好几个CoClass和对应的好几个接口IAppServer
难道连接池单元就是说象unit pooler;要好几个吗?
有那位大侠有更好的例子?很急,谢谢!
 
TPooler = class(TAutoObject, IPooledRDM)
是不是只对IPooledRDM起作用?
如果我现在还有个ILongin呢?
难道再建一个unit pooler单元
TPooler = class(TAutoObject, ILongin)这样来实现ILongin接口的连接池
 
似乎如此。不知Midas有没有内置Pool功能。
 
Client激活不了Srvrdm中的TPooledRDM,因为它是ciInternal,那怎么C/S交互了?
就是Login 单元的TPooler = class(TAutoObject, IPooledRDM),由它来响应Client 的连接
交互。然后LockRDM, UnLockRDM中进行连接池的实现。
 
LockRDM, UnLockRDM返回值只是IPooledRDM
现在的问题是如果我的接口是多个。LockRDM, UnLockRDM会实现功能吗?
 
不会,在它里面只是一个接口对应一个RDM。
>>LockRDM, UnLockRDM返回值只是IPooledRDM
它不单只是返回一个接口,就是它实现了连接池的功能。看看吧。
 
copy_paste大侠:
如果我的类库里有个接口Ilongin和其他多个接口
那个把unit pooler;的IPooledRDM改为Ilongin
TPooler = class(TAutoObject, Ilongin)里面的一些也改改就可以用到我的系统了
那么我的中间层就实现了连接池的功能了是吗?
 
呵呵,好久前写过一个,就是将它抽取出来。不过丢了,不知哪里了,你还是先看看
这个Pooler例子,看懂了再说,不然我也说不清楚,有些东西,理解了才有用,不然
实现了,以后出问题了也不知怎么回事。
 
你看了两遍了,已经有所理解了。
我现在也是想提起主要的东西。能实现功能就好。
你给我讲讲吧!谢谢!
 
连接池只是相对数据库或什么连接之类来说,因为连接耗时,所以有了这个什么什么连接池
的概念。
那个例子中,
Srvrdm.TPoolerRDM实现的是对IPoolerRDM接口的实现。但它是:ciInternal,tmApartment
模式的,也就是说它不能由客户端机器发起来激活,虽然它是Apartment,为可以为每个本身
请求分配一个COM实例,但它只能是能给本机子的程序激活,所以用到了Login.TPooler
Login.TPooler就是实现与外部客户机器交互。自动化对象和COM接口在实现上都是相差不多,
有细小差别(我不太清楚,理解止于此),ciMultiInstance, tmFree使它可以让响应外部客户
机器,当请求来时,就进行LockRDM.
LockRDM就是在这里进行完成连接池的工作的。一个请求一个LockRDM,多个,同时(MultiInstance的关系)的
LockRDM产生出多个IPooler接口实例(就是Srvrdm.TPoolerRDM对象),但产生出来的对象是:
无则Create,有则看是否有空闲,无空闲则Create,如果超过MaxCount,则busy,
这也是连接池的规则了。
暂这样理解,有错大家指出。
 
还不是很清楚,继续
 
就这些了,我没看过关于COM的书,所以有些东西也讲不出来,只知道代码的一些实现。
所以很难说,你还是去找些书看吧。

又是一个情人节。。。
 
是呀,情人节。
copy_paste没有图标吗?
 
copy_paste没有情人吗?
 
请各位大侠,继续呀!
 
分太少,再加分啊.
1、TPooler是相当于一个TPooledRDM的代理
2、如果想管理多个不同的TPooledRDM,那你必须在Tpooler中实现
AS_ApplyUpdates AS_GetRecords,AS_DataRequest,AS_GetParams,AS_Execute
等方法时根据客户端的具体调用来确定启动那个真实的TPooledRDM,
我的建议是你根据 AS_ApplyUpdates AS_GetRecords,AS_DataRequest,AS_GetParams,AS_Execute
等方法中的Providername来确定应该启动哪个TPoolerRDM,当然是在最好根据不同的类型,
在TPoolManager中写LockRDM1、LockRDM2...等方法用于返回不同的IPoolerRDM(当然不是都叫IPoolerRDM,可能是IPoolerRDM1.IPoolerRDM2什么的)
 
怎么少了一些数据。奇怪!
 
to:yunye
帮我做个小例子就可以了
发到
zqs10597249@sina.com.cn
我开个帖子你来拿分吧。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1659413
 
yunye大侠
先发50分。
 

Similar threads

后退
顶部