快速业务通道

让C++也支持RMI

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
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方法后的结果代码如下

public:
double sum(double p1,double p2)
{
  return   FunctionObject<double ,double ,double >()(JOINSTRING4(double ,sum,double ,double ),this,p1,p2);
}

客户端详细处理过程如图所示

让C++也支持RMI

服务器端

采用服务器端类定义宏定义RMIServer 模板,并使用方法添加宏完善其CallLocalFunction方法。

CallLocalFunction方法经完善后内容如下(仅以添加的sum方法为例):

void CallLocalFunction(const char* pFuncID, void* pParaList,int tParaListLenght,SOCKET tSocket)
{

  if(strcmp(JOINSTRING4(double,sum,double,double),pFuncID)==0)
  {
Double mdoublesumdoubledouble = pMServer->sum(
ParaListAnalyser<double,double,double>(pParaList).GetP1(),
ParaListAnalyser<double,double,double>(pParaList).GetP2()
)
     SendResponse(&mdoublesumdoubledouble,sizeof(double),tSocket);
}
...
...
...
}

服务器端首先以所要实现RMI的类为模板参数实例化一个对象ServerCalculate

接着调用ServerCalculate.AddLocalObject(&calcluateObject)将所要实现远程方法访问的本地对象添加到ServerCalculate中,随后调用ServerCalculate.Listen(663)实现在本地663端口监听。至此服务器已经启动,当有客户端发来方法调用请求后,服务器即可自动启动一单独线程处理请求并返回结果。

服务器端详细处理过程如图所示

让C++也支持RMI

不足与改进

由于作者能力有限以及时间仓促,程序尚有许多不尽如人意之处,具体表现在以下几方面。

1。安全性问题。对于客户端的连接请求,服务器端未做授权检查。任何与服务器端所绑定之类实例有相同成员函数者均可调用之。

2。不支持指针以及引用。

3。缺乏对客户端连接的日志统计功能。诸如客户端连接数目,请求时间,退出时间等服务器尚不具备记录统计此等信息之能力。

4。错误处理不完善。对于连接过程中网络中出现错误,客户端以及服务器端均未作检测,也就未能对错误做出及时有效的反应。

针对以上问题,有兴趣的读者可以自行完善扩充,一来可以大大增强本程序的实用性。二来,文中涉及的很多C++代码复用技术亦不失为各位读者学习领会C++的难度机会。

后记

本文模拟boost RCF使用方式,实现了一个类似RMI功能的开发包,距离真正的应用尚有很长的路要走,作者意在通过本文展示一下C++强大的代码复用技术,以期抛砖引玉,博方家一笑。

文中涉及之代码在windowsXP vc6.0 下编译通过,有意者可发送邮件至webstorage@126.com索取。

关于作者:本文作者王树栋,北方工业大学在校研究生,平时热衷于计算机底层开发,对Linux情有独钟。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号