关于Delphi6.0开发的三层服务器掉线的问题
开发运行环境:
1.数据库服务器采用ORACLE9i,硬件配置绝对能撑!
2.应用服务器端采用Delphi6.0开发,TypeLibrary来实现IDL接口,采用TcorbaDataModule(88个模块)结合TAdoDataSet进行数据处理,该应用层服务器使用的硬件为SUN服务器,多CPU,WIN2K SERVER操作平台;
3.客户端采用Delphi6.0开发,TClientDateSet与之对应相连,WIN2K PRO 操作平台;
4.中间件采用Delphi6.0自带的VisiBroker3.3;
5.78台客户端,两台SUN服务器。
掉线现象:
1.一般使用一个星期(操作不是很频繁)就会掉一次线,将服务器端启动的所有服务器端进程杀掉,然后客户端启动,服务器端通过VisiBroker3.3 OAD自动重新启动,一般会启动多个进程,然后就没有问题,系统运行就正常!严重的还必须重新启动一下服务器端机器才可以。
2.使用的SUN服务器是多CPU的,在多CPU环境下掉线异常频繁,每几个小时会掉一次,因此,现在只留一个CPU在机器里。
情况分析:
1.Delphi6.0自带的VisiBroker3.3是自带工具,只能用于开发而不适合实际商业应用,要投入实际商业应用必须购买企业版的中间件。如果只用于开发而不能做为商业应用,是不是意味着Delphi6.0不能做三层?我可以这么理解吗?(商业化的VisiBroker据说是个天价,客户肯定不会因为我们的软件而自配一套企业版的VisiBroker)
2.应用服务器端接口存在问题,这只能是一种猜测,究竟是什么问题?采用的是Delphi6.0的TypeLibrary生成的接口,在这个接口下进行应用服务器开发还有什么规范吗?应该跟开发C/S是一个道理。(如果是这个原因我该如何规范代码呢?)
3.多CPU掉线频繁肯定是跟底层代码有关!但究竟是自带的VisiBroker3.3还是TypeLibrary又或者是TAdoDataSet的问题?其实我更希望是自己写的服务器的问题,可是我想这种可能性应该是最小吧?做数据库开发,底层或者说系统层的都是由控件完成的,我们写的代码只是一些SQL和一些业务控制。(该如何控制内部的CPU分配?服务器端一个应用程序,也就是说一个进程,每一个客户端连接的一个进程,体现在服务器进程里的是一个线程操作,是否是客户端一旦不操作如何快速释放该连接的线程的问题,然后客户端暂时与服务器端断开,服务器端与数据库的相关连接也自动释放,一旦客户操作,就默认重连一下服务器,这样客户端操作感觉不到是掉过线的,这样该如何处理?我看到客户断即使全部断开,应用服务器与数据库服务器断的连接几乎完全没有释放掉,这又是什么原因,是否ADO连接本身就是有问题呢?)
需要解决的问题:
1.SUN服务器的其他CPU如何才能安装到机器上?究竟Delphi 6.0自带的CORBA能否支持多CPU?
2.一个星期一次的掉线,太夸张了吧?一个月还可以接受!
显然,我认为以上的情况分析过于片面,而且即使能确定是上面的原因,也没有切实可行的解决方案,希望大家能帮助我想想办法,如果需要源码,我可以贴出一部分来,大家帮我研究研究,有相关资料的请发到我的邮箱:LiuFuSh@hotmail.com。