快速业务通道

让C++也支持RMI

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
uo;Calculate”为模板参数,声明一个实例“ClientCalculate”,并调用Connect方法链接到服务器。

RMIClient<Calculate> ClientCalculate;
ClientCalculate.Connect("127.0.0.1",663);
步骤4

直接调用ClientCalculate成员方法,即可实现客户端于服务器通讯。

int nResult = ClientCalculate.sum(2,33);
  double dResult = ClientCalculate.sum(2.2,33.21);
  nResult = ClientCalculate.GetInput();
  Teacher t1;
  Student s1;
  s1=ClientCalculate.GetStudent(t1);
以上客户端所调用之方法均自服务器端执行,结果返回给客户端。

主要特点

由以上过程可见,采用MYRMI宏实现客户端与服务器之间的通讯过程有如下特点:

1. 实现简单。客户端与服务器传输不同类型的数据无需用大量switch-case语句判断

2. 可扩展性强。动态添加方法比较容易。只需在Calculate类中添加相应定义,并采用MYMRI宏向客户端以及服务器端分别添加所需之方法,即可由客户端对象ClientCalculate直接调用。

3. 通讯过程可控。如果需要,仅需在服务器端调用AddLocalObject()绑定至其它同类型服务器对象即可。Boost中的RCF库尚不具备此功能!

4. 多线程处理。服务器端采用多线程处理,不影响服务器的其它操作。

5. 线程安全的。多个客户端同时连接时,程序自动完成互斥与同步工作。

6. 采用tcp链接。安全可靠。

7. 采用标准C++语法实现。移植性,跨平台性强。

8. 源码发布。只需向程序中添加相应的源文件即可,无需额外的动态链接库支持。

系统实现

本系统采用大量宏替换技术作为其实现方式,其间涉及模板,纯虚函数,方法对象,联合类型等多种C++代码复用技术,为清晰起见,首先介绍系统中涉及的几种主要数据结构。

主要数据结构

class RMIClientBase:客户端数据传输基类。

负责客户端与服务器之间的数据通讯,管理和维护同服务器的连接。具体功能函数如下:

连接服务器:bool Connect(char* tRomateIP,int tRomatePort);

关闭连接:void StopConnect();

判断链接有效性:bool IsAvailable();

向服务器传递数据接收返回内容:bool CallRemoteFunction(RemoteFunctionStub* tRFStub)

class RMIServerBase:服务器端数据传输基类。

接收客户端所传入之参数。

将本地函数返回值返回到客户端。

负责多个客户端连接管理(启动/关闭链接,多线程间互斥同步等),具体功能函数如下:

开始监听:bool Listen(int tPort);

停止监听:bool Stop();

监听网络端连接请求:static DWORD WINAPI ListenThread(LPVOID pPara);

为不影响服务器正常工作,新启动一个线程负责监听客户端请求。对于每个新产生的客户 端连接请求,再次启动一个线程调用ProcessRequest处理新产生的客户端请求。

处理单个链接请求:static DWORD WINAPI ProcessRequest(LPVOID pPara);

对于每个客户端请求,服务器均启动一个单独线程处理其请求,线程间自动完成互斥以及同步工作。

调用本地函数:virtual void CallLocalFunction(const char* pFuncID, void* pParaList,int tParaListLenght,SOCKET tSocket)=0;

此函数为“纯虚函数”由其基类实现之:根据pFuncID指定的本地函数,以pParaList内保存的参数列表为参数调用本地函数。

class FunctionObject:函数对象模板。

将客户但调用函数之参数列表以及函数ID封装为“函数存根(RemoteFunctionStub)”。

以此函数存根为参数调用RMIServerBase的纯虚函数CallRemoteFunction,将函数ID以及参数列表传输到远端服务器。

接受服务器返回,并将结果强制转换为所调用函数的返回值类型,返回调用者。

struct RemoteFunctionStub:函数存根。

用于客户端与服务器间传递所调用函数之信息。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号