让C++也支持RMI
由于没有类似java的“反射”机制,标准C++下实现RMI似乎有些困难。为C++程序员所熟悉的Boost库虽然有RCF实现了类似RMI的功能,但RCF本身需依赖于Boost::serlization支持,而serlization需要编译之后方可使用,且有诸多限制。 本文试图通过C++特有的代码复用机制模拟实现具有类似RMI功能的类库,虽然不能完全实现java的RMI功能,但较之以往的C/S编程模式有了很大改观,且文中涉及很多C++代码复用技术例如模板,纯虚函数,方法对象等,希望对C++初学者有一定的帮助。 作者才疏学浅,如有不当之处还请读者指正。 关键字 RMI,反射,远程方法访问,虚函数,函数对象,默认模板参数,宏替换。 由一个例子说起 以下实现一个简单的客户端与服务器通讯的例子。例子采用传统的C/S模式,内容很简单,客户端通过调用服务器端的方法向服务器发送数据并接收返回值。 为方便起见,下面分客户端与服务器分别介绍实现。 服务器端 步骤1 创建一个类“Calculate”。 class Calculate{ 步骤2 调用MYRMI宏实现一个服务器端模板“RMIServer”。
函数名称以及返回值,参数列表均与Calculate类中所声明一致。 步骤3 以“Calculate”为模板参数实现一个服务器端实例。
步骤4 实现一个Calculate类实例 calcluateObject。
步骤5 将calcluateObject对象添加进ServerCalculate中。
步骤6 ServerCalculate在指定端口监听客户端请求,启动服务。
至此服务器端部署完毕,当有客户端请求到达后,服务器便会自动启动新线程处理请求,同时不影响服务器端其它正常工作,如想停止服务,直接调用ServerCalculate.Stop()函数即可。 客户端 步骤1 创建一个与服务器端相同的类“Calculate”; 代码略 步骤2 客户端调用MYRMI宏实现一个客户端类模板“RMIClient”。 其中,RMIClient为模板名称,sum ,GetInput,GetStudent均为此模板所具有之方法,且均与Calculate中定义之方法相同(包括返回值,函数名,参数表) 步骤3 客户端以&ldq |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |