下载此文档

基于ICE中间件的RPC通信的设计与实现.doc


文档分类:IT计算机 | 页数:约16页 举报非法文档有奖
1/16
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/16 下载此文档
文档列表 文档介绍

: .
基于ICE中间件的RPC通信的设计与实现-《详细设计》
基于ICE中间件的RPC通信的设计与实现
1、 背景
在系统各模块的设计中, 存在着诸多的远程接口, 比如前端操作显示软件与后端调度服 务软件之间、后端设计服务软件与订阅管理软件之间、后端调度服务软件与计算节点之间、 计算节点与计算节点之间等都是通过 RPC方式来完成的。为此必须对整个系统的 RPC调用
构思一种通用的方案,且能够很方便实现各接口。
本文的目的正是探索一种通用的解决方案,对整个平台的 RPC通信提供支持。
由于移植现有的 NMSTL中的PRC存在如下不足:
一、 移植NMSTL的RPC时间长,ICE直接学会并使用即可。
二、 为了在 Windows和Unix平台保持系统通用。移植的 NMSTL只能在 Windows 下或Unix下用。
为了克服以上缺点,选择 ICE中间件,利用其提供的 RPC机制设计方案。
2、 方案设计

此部分主要用于描述服务器与客户端进行通信的接口, 使用ICE中间件平台专用的Slice
来进行定义(具体参照Slice语法规范)。这是一种用于使对象接口与其实现相分离的基础性 抽象机制,在客户与服务器之间建立合约,描述应用所使用的各种类型及对象接口。
利用编译器将这种与语言无关的定义翻译成针对特定语言的类型定义和 API,这里利用
slice2cpp编译器将slice定义映射成服务器端的框架文件和客户端的代理文件。
如有远程接口 void add_xml_string(string xml);用 slice 语言描述如下:
()
module demo
{
in terface RpcMethod
{
void addXmlStringRpc(string xml);
};
};
说明:module demo表示接口的命名空间, 每个in terface编译后都会生成一个抽象 class
与之对应,in terface中的每一个方法都会生成在抽象类中有一个纯虚函数与之对应。

locunents and $ett in HceScpp demo . ice

服务器端设计
服务器端功能设计
(1) 服务 Servant 的实现: 也就是接口设计中所描述操作的具体实现。对于在 slice 文件中所定义的每个 interface
都会在框架中生成一个具体的抽象类 class,而对于接口中每个操作都会在对应的抽象类中
生成一个纯虚函数。因此服务 Servant 的实现过程就是去继承此抽象类,然后具体地去实现 这些纯虚函数即可。
如上述 2-1 中的 编译后生成框架中包含一个对应类 RpcMethod :
class RpcMethod : virtual public ::Ice::Object
{
public: virtual void addXmlStringRpc(const ::std::string&, const ::Ice::Current& = ::Ice::Current()) = 0;
}
服务 Servant 的实现即继承上面的抽象类并实现其纯虚函数,具体来说: class RpcMethodI: public RpcMethod{
public:
virtual void rpcAddXmlString(const ::std::string& xml, const ::Ice::Current& current){
//这里面是业务代码,即具体 RPC 方法的应用逻辑
}
}
(2) 服务端 RPC 通信环境的建立: 包括 ICE 通信器的建立、 对象适配器的产生、 服务 Servant 服务的注册等。
服务端 RPC 通信环境的建立分为如下几个步骤:
① 服务端 ICE 通信器即 Ice::Communicator 的建立: 通信器的一个实例是与服务器端 一些运行资源关联在一起的,包括服务端线程池、日志记录器、对象适配器等。
② 对象适配器即 Ice::ObjectAdapter 的创建:一个通信器可以有一个或多个对象适器, 一个对象适配器则可以有一个或多个 Servant 服务。它把 Ice 对象映射到到来请求的
servant ,并把请求分派

基于ICE中间件的RPC通信的设计与实现 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息