容错处理:怎样在当前应用服务器无法联结时,自动联结到另一台应用服务器(200分)

S

siyan

Unregistered / Unconfirmed
GUEST, unregistred user!
我对容错处理的几点疑惑
1、李维的书中的处理方式:
在客户端需要调用应用服务器的方法时使用异常处理,出现异常则联结另外的应用
服务器,如果客户端与应用服务器的交互比较多,那么是否就要在每个联结调用的地方
都加入这段异常处理的代码呢?难道当前应用服务器无法连接时,socketconnetion不会
触发异常吗?如果会触发,那么我能不能在捕获这个异常的地方统一进行容错处理呢?
2、获取新的应用服务器地址后,李维的书中使用
try SocketConnection1.connnect:=True except .....
的方式来判断新的应用服务器是否能够连接,可是在我的系统中,如果应用服务器
没有运行scktsvr.exe,则这个连接过程需要很长的时间,当然,最后会抛出一个异常
可是这么长的连接过程连我自己都无法忍受,何况挑剔的用户呢
想请大家指教你们的系统中是怎么进行容错处理的
 
客户端用TSimpleObjectBroker,在其Servers属性里加入可用的服务器地址(提示:你可以用
TStrings.LoadFromFile方法使程序在运行时从一个文件里读入,这样你就可以灵活配置可用
的服务器地址了),然后把用于连接服务器组件的TDCOMConnection或TSocketConnection的
ObjectBroker属性设为此TSimpleObjectBroker对象就可以了,而且TSimpleObjectBroker还
可以提供负载均衡支持,只要把它的LoadBalanced属性设为True就可以了。注意:这个属性
应该在运行时设置,如果在IDE里(设计时)设置的话,每次打开项目它就会自动连接服务器,
这会带来一些麻烦。
 
to sachow
不知道是我表达得不够清楚,还是你误解了的我的意思
我的问题就是在使用TSimpleObjectBroker之后,在什么地方使用怎样的代码
才能比较好的实现容错处理,我想不可能是简单放个控件就能解决的吧
 
抱歉,是我没有认真审题。
我现在用的就是比较烦琐的做法,如果要集中处理,确实不是很容易做的,也许要做指向函
数的指针(C的方式)或对象方法重载的方式才能处理调用方法时,参数的不同与及返回值
不同的问题。
对于第二个问题可能也很难处理,从网络编程这个层面来说,我们能很快知道连接服务器失败
了,但TSocketConnection把网络层封装在底部了,我们就难以干预它,使它快一点返回失败。
能不能在客户端先做一个socket client连一下它?这样能能更快知道结果了(服务器端的
scksrvr不要随便改端口号)。——我还没试过,只是隐约觉得这样可能不好使。
 
計時囂,到時不管有沒有錯就中斷,然後連別的應用服務囂我就是這樣子做的.
 
to ghuan
那你的时间间隔是多少,如果在这个时间段里当前连接的应用服务器出现故障
而用户又急需连接应用服务器的时候,又要怎么处理呢
 
据说corba解决的方法非常满意,采用agent的方式处理。corba服务所有都必须在
agent处注册,然后客户连接的时候agent自动取一个好的给对方
 
我也有这个问题,想看看别人是如何处理的! 孙老师那里去了??
 
好像每個連接都有一個對應連接池......
自動維護的.........................
 
如果在連接池中沒有可用的server ,則EXCEPTION.
 
to dragonlee007
我的问题是触发这个异常需要的时间太长了,有没有更好的方式能及时
知道应用服务器能否正常连接
 
激活控制
 
to dragonlee007
能说得详细点吗?
 
broker
manage it
 
to dragonlee007
大侠始终惜语如金,可是我实在愚钝,不明白你的意思
 
在客户端连接应用层时,这段时间是不会触发任何事件的,也不能用时间来衡量,在网络
中这个是不确定的。
用Socket连接应用层时, 当找不到IP的应用层端接口函数或scktsrvr.exe 时,连接速度
就会很慢,当SocketConnection1.Connection :=Ture时,它就会创建一个事务线程,把
设置的值赋给它,然后发送消息到远程电脑中去,在未发送成功一直都是等待状态,加上
Socket 是不能使用回叫信号。
 
dragonlee007 所说的是不是
对应 com组件中对应你这个组件的属性中的激活项的对象池吧
在这里你可以启用对象池
设置它的大小和创建超时时间,来中止远程序连接
 
to shuszj
大侠有什么好方法能快速判断应用服务器能否使用呢
 
顶部