让C++也支持RMI
MYVOIDCLASS,P1,P2>(pParaList).GetP2());\ return ; \ } 无参数函数添加宏与有参数函数添加宏大体类似,所不同者有以下几个方面。 1. 指定模板ParaListAnalyser的模板参数时,采用“MYVOIDCLASS”作为第一模板参数。 “MYVOIDCLASS”为一特殊数据类型,用于指定模板参数时,区别有返回值的情况,以便ParaListAnalyser做不同处理 2. 因无返回值,本地函数执行完毕后即直接返回,无需将结果返回至客户端,亦无必要生成一临时变量用于保存本地函数返回值。 详细处理过程 下面以客户端以及服务器端分别加以说明 客户端 客户端采用主动请求方式与服务器通讯,当客户端有方法调用时,即将函数所需之参数发送至服务器,并接收返回值。 下面以客户端调用sum方法“ ClientCalculate.sum(2.2,33.21)”为例介绍处理过程。 在采用 MY_RMI_CLIENT_FUNCTION_ADD_P2(double,sum,double,double) 向RMIClient中添加sum方法后的结果代码如下
客户端详细处理过程如图所示 服务器端 采用服务器端类定义宏定义RMIServer 模板,并使用方法添加宏完善其CallLocalFunction方法。 CallLocalFunction方法经完善后内容如下(仅以添加的sum方法为例):
服务器端首先以所要实现RMI的类为模板参数实例化一个对象ServerCalculate 接着调用ServerCalculate.AddLocalObject(&calcluateObject)将所要实现远程方法访问的本地对象添加到ServerCalculate中,随后调用ServerCalculate.Listen(663)实现在本地663端口监听。至此服务器已经启动,当有客户端发来方法调用请求后,服务器即可自动启动一单独线程处理请求并返回结果。 服务器端详细处理过程如图所示 不足与改进 由于作者能力有限以及时间仓促,程序尚有许多不尽如人意之处,具体表现在以下几方面。 1。安全性问题。对于客户端的连接请求,服务器端未做授权检查。任何与服务器端所绑定之类实例有相同成员函数者均可调用之。 2。不支持指针以及引用。 3。缺乏对客户端连接的日志统计功能。诸如客户端连接数目,请求时间,退出时间等服务器尚不具备记录统计此等信息之能力。 4。错误处理不完善。对于连接过程中网络中出现错误,客户端以及服务器端均未作检测,也就未能对错误做出及时有效的反应。 针对以上问题,有兴趣的读者可以自行完善扩充,一来可以大大增强本程序的实用性。二来,文中涉及的很多C++代码复用技术亦不失为各位读者学习领会C++的难度机会。 后记 本文模拟boost RCF使用方式,实现了一个类似RMI功能的开发包,距离真正的应用尚有很长的路要走,作者意在通过本文展示一下C++强大的代码复用技术,以期抛砖引玉,博方家一笑。 文中涉及之代码在windowsXP vc6.0 下编译通过,有意者可发送邮件至webstorage@126.com索取。 关于作者:本文作者王树栋,北方工业大学在校研究生,平时热衷于计算机底层开发,对Linux情有独钟。 本文配套源码 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |