客户端调用中间应用服务器的接口函数,接口函数中调用某模块(DLL形式)的函数,模块函数调用数据库储存过程,这样实现的处理过程
请问:
一般情况没什么问题出现,但有时(不是很多),客户端等待返回时死机。检查如下:网络状况良好,服务器端运行良好,重起客户端就好了,但是为什么会死机呢?
由于这种机会不是很多(当然出现了也是致命的,因为很有可能客户端发送数据了,没收到返回,但服务器端确实收到数据并且执行了操作,这样,客户端再发数据和操作命令时,就会多执行一边操作),错误的重现性很小,因此比较难查找原因,因此,想编写个这样的小程序:
<1>监视客户端与服务器端的底层通信情况,即可以检查客户端的进程运行情况,资源占用等等,有点像资源管理监视器一样,但要详细些
<2>检查客户端在一段时间内得不到返回的原因,服务器端死机,或是客户端计算机与交换机网络出问题,或是服务器端计算机与交换机网络出问题
<3>检查服务器端的状况,包括每个客户端连接的进程运行状况,资源占用情况等等(**)
小弟被这三层开发中通信双方死机迷惑很久了,特请教一下,上面我描述的问题是由于什么原因引起的,以及后面的问题能不能实现,请各位在三层开发中比较有经验的高手们指点一下,小弟谢谢了
请问:
一般情况没什么问题出现,但有时(不是很多),客户端等待返回时死机。检查如下:网络状况良好,服务器端运行良好,重起客户端就好了,但是为什么会死机呢?
由于这种机会不是很多(当然出现了也是致命的,因为很有可能客户端发送数据了,没收到返回,但服务器端确实收到数据并且执行了操作,这样,客户端再发数据和操作命令时,就会多执行一边操作),错误的重现性很小,因此比较难查找原因,因此,想编写个这样的小程序:
<1>监视客户端与服务器端的底层通信情况,即可以检查客户端的进程运行情况,资源占用等等,有点像资源管理监视器一样,但要详细些
<2>检查客户端在一段时间内得不到返回的原因,服务器端死机,或是客户端计算机与交换机网络出问题,或是服务器端计算机与交换机网络出问题
<3>检查服务器端的状况,包括每个客户端连接的进程运行状况,资源占用情况等等(**)
小弟被这三层开发中通信双方死机迷惑很久了,特请教一下,上面我描述的问题是由于什么原因引起的,以及后面的问题能不能实现,请各位在三层开发中比较有经验的高手们指点一下,小弟谢谢了
解决方案 »
- 高手帮我看看SQL语句的问题,谢谢
- delphi的困惑
- 装上了MSDE之后如何为桌面的SQL Server 指定数据库及其数据库名称呢?
- DBGrid/DBGridEh新增或修改数据时如何验证输入的数据是否有效
- 请教Type的用法!
- wjlsmail(计算机质子)你这个死猪头近来拿分:(
- 单元测试应该注意的问题!
- wininet httpsendrequestex 同一request 为什么都是新连接
- 100.分散分,一直对自定义过程和字定义函数的形参不太了解,请前辈就参数定义的问题说说定义的经验.
- 特急,紧急,大家快来救命~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- EhLib 4.0 出来了,那位有正式版?
- 关于报表QRDBText1.DataField:=???
客户端使用TSocketConnection连接AppServer
主要是这种模式运行,数据的返回数好像不能怎么影响的现在问题是TSocketConnetction连接,怎么控制,以确保不死机啊,也就是即使网线断了,客户端怎么断开啊,现在是一直等待服务器返回所以进入死机状态
有没有那位大哥有好点的办法小弟谢谢了
这个问题我想可以用这个办法:
想办法把客户端的文件保存为文件,在出错时调用本地的,在连接正常时再上传,大概思路如此,
因为具体情况很复杂,
谢谢回答!
当然就是这样做的,本地还有脱机版和数据库,这些都不是问题,但是我就像处理上面描述的问题啊,关键是这种情况下没有错误发生啊,他只是在等待,难道有哪个地方设置的?
三层架构
客户端用datasnap.tSocketConnection连接
服务器端写一个测试函数:
function test();
begin
showmessage('test');
end
当客户端调用test()时,服务器端弹出消息test,此时,拔掉服务器端网线,过一段时间在接上,这样客户端就一直死机
这是一个模拟网络中断的简单模式,请问这种问题是怎么解决的?弄了好久了,一直都不能够解决,望大哥们能给些建议
我换了7.0版本的,但一样……
还有另外一个问题:三层架构中无法使用BLOB字段的内容。
让我郁闷了很久。
当网线断开时他们的握手状态就接受了,再要想连接就得重新建立了。解决的方法是在服务器端使用连接池对象,在客户端使用无状态对象,这可是三层体系中的精华呀。现在的html,asp,jsp,php都是无状态对象的,所以,即使你把开网线一会儿在连接页一样可以继续你
的工作,哈哈.来吧小伙子,let's go .
raise到可以
几天不上,原来还有这么多解决啊:)to 123amw(怀旭):能否详细点说说用时间控件解决怎么弄呀?早也有人这么说,心跳信号等方法,我试过了,但不知道是不是我写的不对,时间控件中断不了我接口函数调用并使之抛出,多线程么?主要是怎么在调用死机时,进行检测,怎么设置,可以的话请给个例子,谢谢!to 84175971(cyg):
解决的方法是在服务器端使用连接池对象,在客户端使用无状态对象,这可是三层体系中的精华呀。
能否详细说说?让大家分享一下。其实,我一直坚信会有办法处理的,但苦于一直没找出有效的解决办法to JerreyAndMe(孰虞吾比):其实我现在就是在找抛出的办法,以前实现的过程根本就不会抛出,呵呵,我技术上的问题,向大家好好学习!to wing_er() :showmessage是模拟断线环境,没办法,我的东西是在网络比较恶劣的地方运行的,而且处理的业务有不会出错,就不能不考虑了to ffanpeng(樊):怎么换驱动?
总之,Delphi的MIDAS问题多多。
怎么实现阿?
但我还是有些不明白,我现在的案例如何结合
我案例中用到两种情况:
<1>客户端调用中间应用服务器的接口函数(参数包括一个OLEVariant类型为输入参数,一个Interger类型为返回参数),服务器接口函数通过对输入参数的处理,也就是逻辑处理,判断,计算,然后保存到数据库中,并将操作结果状态由返回参数返回给客户端调用者
<2>也是客户端调用接口函数(参数包括操作类型),接口函数通过判断操作类型查询相关数据,通过DataSetProvider发布数据,客户端通过ClientDataSet获取数据
案例中使用的都是两种模式,小弟才疏识浅,搞不太懂这种情况怎么处理接口函数调用时由于掉线而死机的情况,请高手们再指点指点
上面几位提供了几种解决方法,但好像在这种情况下不太好解决,也许123amw(怀旭) 说得方法可以,但还是请再指点指点,不太会,呵呵
第一,在多层体系结构中,通讯的方式普遍使用的是DCOM 或 socket,在这两种方式中都是
为windows而开发的,而又由于DCOM的配置是图形界面,很多编程的人都不知道windows的底
层做了些什么,和到底使用了什么接口去实现,故产生了疑惑,
随着开发的深入问题也就多,其实方法是有,但国内的这种太深入的书籍很少有。
在Delphi中是用DCOM通讯协议制作服务器连接池的案例很少,大多都是为教学方便保持连接
状态的,访问连接的数量越多,服务器占用的资源也越多,直到消耗完所有的资源。
第二,在服务器端我本人强烈建议你使用unix系统,毕竟DCOM,socket有太多太多的病毒攻击了,
在网络维护费上花了大量的财宝,在unix,windows系统中做多层体系结构的最好的通讯协议
使用CORBA,事实也表明DCOM是在模仿它的功能,但无论如何模仿,都不可能达到CORBA的效果
及功能,在稳定性上也大打折扣。
第三,在java的应用中连接池的应用非常普遍,java+CORBA也有专门的介绍,也只有在Delphi方面
可以在快速开发和跨平台上实现最优的结合,如果你这样做了,我想你的系统一定会非常坚固
现在很多人都开始使用CORBA,一旦你开始使用这个通讯协议,你的问题一下子就解决了
最后,如果你要开发非常强劲的坚固的体系结构,unix下的通讯必须知道,是程序员的必须走这条路
如果你这样做了,你的薪水也会猛涨两倍。相信我,这是我自己经历。
2、连接、发送、接收等操作时,尽量用TRY。。EXCEPT,出现异常客户端主动断开连接,释放占有的资源。
3、客户端在接收数据时,一定要设置超时,不要无限期等待。
4、可以采用线程,这样在主线程里可以强行中止死掉的线程。
就是关于多线程的,比如我上面描述的,一个线程调用接口函数,一个线程调用检测网络的函数
当检测网络不通时,将调用接口函数的进程Kill掉
现在能否有哪位大哥能提供一个例子:
一个线程调用接口函数,一个线程调用检测网络的函数
当检测网络不通时,将调用接口函数的进程Kill掉
那就是调用接口函数时,除非客户端收到网络中断的信息(事实上根本就收不到),否则根本就不会出现异常而抛出,也就是客户端程序还是认为正常而继续运行的,所以,用try...except也没什么效果
现在,我个人认为,这种情况也许只有使用多线程的方法,也就是检测网络的线程发现网络中断后,给出友好提示,然后中断调用远程接口函数的线程,只有这种方法成为可能了
但是,小弟对多线程编程不太熟悉,而且,现在程序已经写完了,所以希望那位大虾能指点一下
如何在调用接口函数时使用多线程,小弟感激不尽,比较着急,望能给个示意的例子,谢谢了!
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=6577