请问我的三层结构,用的是DCOM,为什么,用两三天后,服务器端就出错,客户端就不能连接!!(77分)

  • 主题发起人 主题发起人 royhgf
  • 开始时间 开始时间
R

royhgf

Unregistered / Unconfirmed
GUEST, unregistred user!
请问我的三层结构,用的是DCOM,为什么,用两三天后,服务器端就出错,客户端就不能连接!!急求原因和解决的办法!!!我已经用完所有积分啦,希望各位可以给个方法!!!
 
楼主至少说说报什么错吧,我崩了。。。。
 
就是服务端程序死了,不能动,客户端程序不能连接啊
 
应用层死了,这个可能有很多原因!
 
应该怎样做!!!现在不知道什么原因!!要经常强行关闭服务端程序才行!!烦
 
参照远程应用开发组件
www.dbanywhere.cn
 
哎,那个skctsvr.exe不知害了多少人。
用阻塞模式是不行的,只能用于少量连接的场合。
 
我用的是SocketConnection做链接的,一般同时连接的数目最多十几个啊!!!我也不知道为什么会死掉!!!有时候用几天就会这样的啦!!!请指教..
 
若有能力,改进scktsvr,改成非阻塞的,或者直接以IOCP实现,同时把pooling技术用进去,如任务的polling、线程的pooling等。
若无这实力,就查查资料及scktsvr程序本身,看看Bug在哪里
 
一般都是线程对象因出错等原因而未能有效释放引起,积压得多了,自然就死了
 
我试过同时超过10个客户连接中间层就死掉啦,但我的scktsrvr 里的thread caching属性设置成20还是一样超过10死掉啊.为什么啊?
来自:wpy020327, 时间:2008-8-10 11:27:53, ID:3913394
一般都是线程对象因出错等原因而未能有效释放引起,积压得多了,自然就死了
怎样释放啊,可以给个简单的例子吗?
 
如:本来一个线程这样运行的:
while not terminateddo
begin
线程功能实现
end;

后来因某些原因引起异常,导致线程在执行“线程功能实现”部分代码的过程中被中断了,那么这个线程对象会处于怎样的一个状态呢?还有,因临界资源(比如一个记录)的访问等原因造成死锁,线程越来越多,也就死了。
以前我用SocketThread搞过这方面的编程,但最后还是放弃这种方法了,尽管实现起来代码结构相对清晰,但很难保证不出问题。比如内存泄漏问题、传输超时问题、异常捕捉不全面等,都会导致整个系统出现错误,最后崩溃。
ScktSvr是Borland公司的一个demo程序而已,用它来做商业应用是不妥的。当然,也不知Borland公司怎么想的,这么重要的东西,却做得这么烂,问题多多。
 
建议你再检查一遍scktsvr程序,可能出现异常的地方都进行捕捉处理,然后注意对敏感代码段进行互拆处理,还有,注意对象、变量等的释放,避免出现内存泄漏。
 
至于无法建立新的客户端连接,那是很自然的事情,用ThreadBlocking模式时,若并发用户数多(你的情况可能是激活状态的线程过多),端口很容易堵塞,不会创建新的连接。解决这个问题的方法是开任务队列,而线程数一般设置一个上限(比如最多32个线程),用这有限的几十个线程来共同完成对任务队列中的任务的处理。(这个就是Thread Pooling)
 
最后,非常重要的一点:在各个单元加入uses ShareMem;
据我以前的实践经验,加这句之后,会避免很多的内存泄漏引起的异常。
 
但每次都是开第十个的时候死掉,这是什么原因啊
 
你服务器中间层是用Midas方法还是COM+方法开发的?
 
mdias啊,这个和scktsrvr有关吗,急求解决方法
 
很多人用的midas 出了不少问题,看来这个解决方案似乎不是很好。
 
后退
顶部