请教若干delphi的RDM多层问题(经典:大家都会遇到的多层问题,请高手进来讨论)(200分)

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

zjj_001

Unregistered / Unconfirmed
GUEST, unregistred user!
[blue][/blue]一、ADO数据库连接应该是放在RDM中的,还是放在RDM外面的,然后ADOQuery等连到AdoConnection的。我现在是放在RDM外面的,不知这样是否会有问题。
[red][/red]二、是否能给一段容错平衡的代码作为参考,该问题还有以下子问题:
1、可用应服的列表是怎么给客户端的,是否把应服列表放在INT配置文件中,然后初始化入TSimpleObjectBroker的Servers属性中?
2、如何在代码中实现容错。
3、某个应服坏掉了,做上了标记;那么当该应服重启正常后,怎么通知客户端该应服可重用了?
[blue][/blue]三、我目前的三层应用系统经实践试用,存在有时会查死的现象,特别是通过存储过程返回数据时,不知道各位有否碰到过类似现象,有否对应的解决方法。
[red][/red]四、最后一个问题是应服运行一段时间后(时间不定,有时可连续运行一周,有时不到一天),会出现客户端连不上应服的现象(双击客户端运行后,没有任何反应,没有界面,在任务管理器中可以看到该进程),在应用服务器的scktsrvr.exe的users标签页中可以看到客户端的IP地址(客户端不多,一般在30个左右)。一般重启应用服务和scktsrvr.exe后,故障现像消失,客户端又可进行正常连接。
注:分不是问题,只要能解决问题,分可以再加。
另:我公司现招聘熟悉delphi-RDM多层开发的人材,公司在浙江杭州,现有30人左右,从事电信后台维护支持系统的开发,欢迎有兴趣的朋友加盟!
联系方式:email: zjj_001@163.com QQ:99806788
 
我9月中去杭州的呀,可以试试么?
 
ADO数据库连接放在RDM外面,当同时有多个并发的连接或访问时,服务端肯定要挂掉,这个我做过试验.原因是并发的RDM线程会抢占一个ADO连接,导致数据或代码重入.但如果是串行的连接则没事.你试了放在外面也没事?你试过多个客户端并发存取吗?
 
连接放在RDM外面,你就必须维护一个数据库连接池,并解决好同步
 
一、ADO数据库连接应该是放在RDM中的,还是放在RDM外面的,然后ADOQuery等连到AdoConnection的。我现在是放在RDM外面的,不知这样是否会有问题。
RE﹕放RDM外面﹐客戶端少時不會出問題﹐但不穩定﹐還是放里面吧
二、是否能给一段容错平衡的代码作为参考,该问题还有以下子问题:
1、可用应服的列表是怎么给客户端的,是否把应服列表放在INT配置文件中,然后初始化入TSimpleObjectBroker的Servers属性中?
RE﹕對﹐配置INI然后讀取
2、如何在代码中实现容错。
RE﹕這個范圍大些﹐如果服務器的錯誤﹐可以捕扣錯誤﹐然后根據錯誤代碼進行處理
3、某个应服坏掉了,做上了标记;那么当该应服重启正常后,怎么通知客户端该应服可重用了?
RE﹕只有重新訊取﹐重覆步驟1﹐至于什么時候重新讀取﹐就要看程序的設計了
三、我目前的三层应用系统经实践试用,存在有时会查死的现象,特别是通过存储过程返回数据时,不知道各位有否碰到过类似现象,有否对应的解决方法。
RE﹕在中間層設置數據庫操作超時值﹐如果中間層錯﹐會報告給客戶端的
四、最后一个问题是应服运行一段时间后(时间不定,有时可连续运行一周,有时不到一天),会出现客户端连不上应服的现象(双击客户端运行后,没有任何反应,没有界面,在任务管理器中可以看到该进程),在应用服务器的scktsrvr.exe的users标签页中可以看到客户端的IP地址(客户端不多,一般在30个左右)。一般重启应用服务和scktsrvr.exe后,故障现像消失,客户端又可进行正常连接。
RE﹕這是socket sever的最大問題所在﹐只能改它的源代碼。臨時的方法﹐可能就是增加台中間層服務器﹐在客戶端小于40的情況下還是很穩定的
//看樓主的問題都挺專業的﹐以后多交流交流BesLee@csoftit.com
 
to phoebe: 欢迎啊!请加我QQ详谈。
to NineSky: 谢谢抬举,多多交流。
to machcat: 我现在的应用是实时刷新的(一个用户做了一个数据操作会导致10几个用户同时执行数据集的重新打开操作),而且用户保存的操作均比较频繁,所以应该并发操作的发生几率是比较高的;
问题不是说没有,像我提到的三、四问题,只是我不知道我提问题中的三和四故障现象是否和ADOConnection放在RDM的内、外有关?
另外我打算采用类似delphi自带的pooler例子的做法,在这儿先向各位高手取个经:
delphi自带的pooler例子中是以bde为示例的,那么像对于我采用:
1、数据库连接采用ADOConnection;
2、Instancing=Multiple Instance;
3、Threading Model=Free。
的情况下,未知类似pooler的做法是否能够支持。
 
第四个问题可能是你的服务端程序已经死掉了,由于第一个问题,你把AdoConnection放在RDM里面,又没处理并发,当多个拥护同时操作一条记录时,你的服务端程序可能会死掉.所以所有客户端都连不上.
 
to liaohj:我的AdoConnection目前是放在外面的,我外客户端连不上时,我的服务端也没有死掉,在服务端点击任一个功能,都能正常切换和显示啊
 
delphi自带的pooler可以换成ADOConnection,它的Threading Model就是Free的,这方面你可以参考刘翔的三层代码,不过他的连接是放在一个单独的DM中的,处理并发的方法是用阻塞方式生成新的动态连接.
 
to machcat:
哦,请问刘翔的三层代码,在哪儿可以参阅或下载,您可以留个联系方法吗:QQ、MSN、或邮件,方便以后讨论,在这儿先谢谢了?
 
学习中。。.
 
不好意思,搞错了,应该是刘祥.他的三层代码在2ccc.com,tomore.com上都有,你搜索一下就能找到,
 
多人接受答案了。
 
后退
顶部