大富翁离线浏览器MTS版开发及三层分布式应用学习实践的问题讨论(100分)

D

Dingyin

Unregistered / Unconfirmed
GUEST, unregistred user!
我的目标是配合MIDAS设计出稳定高效的中间层MTS组件,
web和普通Windows应用程序两种客户端,中间层应该能被两种客户端共享。
通过这种开发学习探索三层分布式应用的方法和模式。
目前实现了帖子的浏览功能:房间列表,房间主题分页显示,查看帖子
经过简化的基本模型是这样的
浏览器------------------ASP交互对象
(数据模板)
|
应用程序(数据模板)-------协调对象-----数据对象-----数据库
MTS里的对象都是无状态对象。
碰到的第一个问题是web和Windows程序间的差异和分布式应用的特性带来的。
即http协议的请求应答模式使普通的html页面很难保持一定量的状态数据
而应用程序则可以。
一开始并没有考虑这种差异,根据李维的建议,数据对象分成了若干个
包括房间对象,主题对象,回应对象,和一个主题索引对象。
最后一个对象的设计是为了加快速度和实现分页显示的任意跳转功能。
后来的设计则取消了这个对象,而增加了一个主题分页索引表。

应用程序客户端浏览功能的逻辑是这样的:
通过协调对象
1。房间对象,取得房间列表
2。主题索引对象,根据用户选择的房间,取得该房间所有主题的索引
3。主题对象,根据用户选择的莫房间的页面号,查询主题索引对象,
取得该页主题的起始关键字和下页主题的起始关键字,
再取得该页面的所有主题列表
4。回应对象,根据用户选择的主题,取得该主题及回应的详细信息。
问题在于主题索引对象,在客户端是应用程序的情况下,在选择了莫个房间后,
只需查询一次主题索引对象,以后的操作都可以利用此次查询的数据。
但对于web客户端的html页面,保存主题索引对象的数据以供各次操作共享则成了一个问题
我要怎么做呢?我想到过html页面用框架的隐藏帧保存数据,不过这种方式使html页面变复杂了
我不想这样。
那只好把主题索引对象的创建移动到了主题对象内,现在问题就来了,在于效率和必要
即使MTS有数据库池和对象池,这种每次查看分页的操作都要创建调用索引对象,
尤其是在数据量大的情况下,实在是很慢,所以我取消了主题索引对象,
把它的功能合并到了主题对象内,但问题依然没有解决。
我想问题实质在于MTS没有实现对象池,而数据库池的功能又是通过对象池来实现的(?)
为了资源共享以服务大量的客户端,MTS又要求尽量使用无状态对象。
一个问题是数据量大,一个问题是数据库连接没有共享
对前一个问题,我的解决办法是在数据库中增加了一个主题分页索引表。
这个表的操作是在主题对象内进行。
有三个字段:房间关键字,主题关键字,页号。
房间的主题每隔20个抽取一个写到此表中,算一页。
这样对于请求房间莫页主题列表的操作,只需根据房间关键字和页号,
从分页索引表中取得两条记录:包括了本页起始主题关键字,和下页起始主题关键字
主题对象就可以取得该页的主题列表了。
在Web客户端的情况下,这个表的增加使主题分页列表的操作速度有了实质上的提高。
在我的机器上(IIS,MTS本机运行,赛扬500,128M),很快的在各页间跳转时,
感觉上都是在0.x秒以内,但如果间歇了一段时间(大约是10秒以内吧),在跳转到别的页时,
则又要花费两三秒的时间。
那么这么慢的问题在哪呢,对象被释放了?数据库连接被释放了?
如果只是在我自己的机器上运行,我可以调用EnableCommit,不调用SetComplete
让这些对象始终在内存中,这样该不会有问题了。
但在实际的Web应用中这显然不可能。
***************那么在MTS中,这个问题该如何解决呢?*****************************
COM+实现了对象池,应该可以解决这个问题,但COM+对能放到对象池中的对象又有些限制
我还没有试验过,不知道针对MTS设计的对象在COM+中能不能利用对象池。

请各位大侠对这个问题和相关的MTS,COM+,MIDAS问题发表意见

 
"但如果间歇了一段时间(大约是10秒以内吧),在跳转到别的页时,
则又要花费两三秒的时间。"
我刚才又试了一下,不止两三秒,至少有七八秒钟
 
各位发表点意见啊,不要就灌水:(
 
请关注。。
 
我的天!
 
我现在正在使用com/mts和com+,有时间咱们可以探讨一下相关的问题
 
sdutsyt,我的oicq:924838,有空聊聊
 
我也在开始弄一个这样的东东,不过一开始就不行了,我的 ASP + MTS + MIDAS 不能
正常的修改数据,每次提交的时候都说“根事务要提交,事务被终止”,有人可以告诉我
如何才可以正常的运行,有人有一个成功的例子吗?希望可以给我一个demo,谢谢大家了。
 
要實現COM+ poolable Object
http://forum.vclxx.org/topic.asp?TOPIC_ID=3917&FORUM_ID=59&CAT_ID=8&Topic_Title=%ADn%B9%EA%B2%7BCOM%2B+poolable+Object&Forum_Title=COM
1、还需结合JIT,以及其他资源管理项。
2、无状态一个实质,就是接口的每个方法运行完毕后不得保留任何状态,留给其他对象。
通过协调对象
1。房间对象,取得房间列表<--->获取房间方法
2。主题索引对象,根据用户选择的房间,取得该房间所有主题的索引,<-->获取主题方法(房间号参数等)
3。主题对象,根据用户选择的莫房间的页面号,查询主题索引对象,
取得该页主题的起始关键字和下页主题的起始关键字,
再取得该页面的所有主题列表
4。回应对象,根据用户选择的主题,取得该主题及回应的详细信息。<-->
对象<=>接口<=>方法集合
将以上对象改为方法,有关用户运行后需要一直保存的数据保可存在Cookie 中, 在COM+中
为了让服务进程一直保持运行,应设置应用程序包的-->关闭服务器进程选项->空闲时保持运行
选项
 
谢谢陈一蛟的回复。
你是说把各个独立的对象聚集成一个大对象,然后让这个大对象一直保持运行。
我想这应该是一个思路吧,不过这好像不符合对象设计的宗旨。不利于重用。
希望各位大侠对这个思路能深入探讨下去,谢谢
 
我想有一点可能我没有说清楚,首先按照目前你实现的以下功能,
帖子的浏览功能:房间列表,房间主题分页显示,查看帖子功能;
从设计对象的粒度的大小和对象的可重用性,以及性能上来考虑,
所以我认为没有必要将本来就可以采用一个方法实现的功能,实现
为一个对象来实现,想想看,对象间的调度和方法的引用,谁的
性能好?从对象的粒度大小来考虑,最小粒度可以到一个对象只实现
最小单位的对象行为(功能),而粒度大一点,也可以是一类对立行为
的集合,但是他们都是基于Model 的大小和 Model 间的独立性,再从
对象的可重用性来考虑,在着重于功能的重用性上考虑时,重要的一点
功能的独立性,几个独立小功能经过流程组合,而成为一个大功能,
最后是到方法重用还是到对象重用,根据COM的实现原理,定义接口,由
组件对象实现接口。
Method 1
Method 2<---- Interface1---|
....... <---- Interface2---|----接口实现(组件对象)
....... <---- Interface3---|
Method n
由上图,可以想到以下实现方法
TAggObject(TAutoObj, Interface1, Interface2, Interface3);
protected
Method1
Method2
...
end;
 
三层给我的感觉不错,可是中间层的选用。。。。:)难以抉择!
 

Similar threads

回复
0
查看
666
不得闲
回复
0
查看
811
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
749
DelphiTeacher的专栏
D
顶部