基于ICE中间件的应用系统通信框架设计
- 格式:doc
- 大小:82.00 KB
- 文档页数:2
Ice快速认识目录Ice快速认识 (1)1.Ice概念 (1)2. Ice实例 (2)3.IceBox介绍 (6)4.IceGrid介绍 (7)1.Ice概念Ice-Internet Communications Engine,是一种面向对象、跨平台、多语言的通信中间件。
支持C++、Java、C#、VB、Python等,客户和服务器可以用不同的语言,可以运行在不同的操作系统和机器架构上,支持TCP/UDP。
Ice应用组成:Ice对象——Ice对象是在本地或远地的地址空间中、能响应客户请求的实体。
先由Slice定义,然后编译成特定语言版本;每个Ice对象有多个接口,支持特定操作,客户通过调用它的接口来发出请求;每个对象有唯一的对象标识。
Servants——服务器端编写的类实例,体现Ice对象行为。
代理(Proxies)——代理是Ice对象在客户端的代表,客户调用代理上的操作来获得服务端上Ice对象提供的服务。
通信器(Ice::Communicator)——通信时,服务器和客户建立一个通信器,为通信进程分配和管理资源,是双方通信的专用线路。
对象适配器(object adapter)——专用于服务器端的Ice API,把Ice run time与服务端编写的Servant类连接在一起。
每个适配器绑定一个端口。
Ice应用的结构如下:SliceSlice (Specification Language for Ice, Ice规范语言),用于对象接口定义与实现相分离的基础性抽象机制,可以把定义好的Ice对象映射成特定语言。
2. Ice实例相同开发环境不同开发环境:Ice应用开发过程:1. 定义Ice对象(Printer.ice)1.module Demo{2.interface Printer{3.void printString(string s);4. };5.}2. 编译成C++1.slice2cpp Printer.ice获得Printer.h/Printer.cpp3.服务端使用C++实现Ice对象(Servant类)1.#include <Ice/Ice.h>2.#include <Printer.h>ing namespace std;ing namespace Demo;5.class PrinterI:public Printer{6.public:7. virtual void printString(const string& s,const Ice::Current&);8.};9.void PrinterI::printString(const string& s, const Ice::Currrent&){10.cout<<s<<endl;11.}4.服务端编写1.Ice::CommunicatorPtr ic;2.//建立通信器3.ic=Ice::initialize(argc, argv);4.//建立对象适配器,绑定端口5.Ice::ObjectAdapterPtr adapter=ic->createObjectAdapterWithEndpoints(6."simplePrinterAdapter","default -p 10000");7.Ice::ObjectPtr object = new PrinterI;8.//加入Ice对象实例,指定标识符9.adapter->add(object,ic->stringToIdentity("SimplePrinter"));10.//启动适配器11.adapter->activate();12.//挂起该进程13.ic->waitForShutdown();5.客户编写1.#include <Ice/Ice.h>2.#include <Printer.h>ing namespace std;ing namespace Demo;5.Ice::CommunicatorPtr ic;6.//建立通信器7.ic = Ice::initialize(argc, argv);8.//获得Ice对象代理,SimplePrinter-对象标识符,default -p 10000-协议与端口9.Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");10.//向下转换11.PrinterPrx printer = PrinterPrx::checkedCast(base);12.if (!printer) throw"Invalid proxy";13.//调用操作14.printer->printString("Hello World!");6.编译1.//服务端2.c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp3.c++ -o server Printer.o Server.o -L$ICE_HOME/lib -lIce -lIceUtil4.//客户端5.c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp6.c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil7.运行服务器端./server,客户端./client3.IceBox介绍IceBox是一个Ice应用服务框架。
自从上世纪九十年代以来,计算工业一直在使用像DCOM和CORBA这样的面向对象中间件平台。
在使分布式计算能为应用开发者所用的进程中,面向对象中间件是十分重要的一步。
开发者第一次拥有了这样的可能:可以构建分布式应用——中间件平台会照管大部分网络杂务,比如整编(marshaling)和解编(unmarshaling)(对数据进行编码与解码,以进行传送)、把逻辑对象地址映射到物理传输端点、根据客户和服务器的原生机器架构改变数据的表示,以及应需自动启动服务器。
然而,由于一些原因,无论是DCOM还是CORBA,都未能成功占领大部分计算市场:(1)DCOM是Microsoft的独家解决方案,在异种网络中,各种机器会运行多种操作系统,无法使用COM。
(2)DCOM不能支持大量对象(数十万或数百万),这在很大程度上是它的分布式垃圾收集机制来的开销造成的。
(3)尽管有多家供应商提供CORBA产品,几乎不可能找到一家供应商,能够为异种网络中的所有环境提供实现。
尽管进行了大量标准化工作,不同的CORBA实现之间仍缺乏互操作性,从而不断地造成各种问题;而且,由于供应商常常会自行定义扩展,而CORBA又缺乏针对多线程环境的规范,对于像C或C++这样的语言,源码兼容性从未完全实现过.(4)DCOM和CORBA都过于复杂。
在异种环境中,让DCOM和CORBA共存从来都不是一件容易的事情:尽管有供应商提供互操作产,这两种平台之间的互操作从来都不是无缝的,而且难以管理,会产生互不相连的技术孤岛。
2002年,平台取代了DCOM。
但尽管.NET提供了比DCOM更强大的分布式计算支持,它仍然是Microsoft的独家解决方案,因而不是异种环境下的选择。
另一方面,CORBA近年来已停滞不前,许多供应商离开了市场,给消费者留下了不再受到广泛支持的平台;剩下的少数供应商在进一步标准化方面的兴趣也已衰退,致使CORBA规范中的许多缺陷未能得到解决,或是在它们被报告多年之后才得到解决。
ICE资料整理概念ICE: (The Internet Communications Engine)互联网通信引擎。
是由前CORBA专家开发的新一代面向对象中间件,ICE之轻量级分布式通讯中间件。
介绍:ICE是一种面向对象的中间件平台。
从根本上说,这意味着Ice 为构建面向对象的客户-服务器应用提供了工具、API 和库支持。
Ice 应用适合于异构平台环境中使用:客户和服务器可以采用不同的编程语言,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。
无论部署环境如何,这些应用的源码都是可移植的。
其采用C/S 模式结构,支持同步调用方式和异步调用方式,异步派发调用方式。
支持跨语言的对象调用。
多种语言之间采用共同的Slice(Specification Language for Ice)进行沟通。
支持ice到C,JAVA,C#,VB,Python,Ruby,PHP等多种语言的映射。
Ice源代码发布包包含一系列的第三方产品(Berkeley DB,bzip2/libbzip2,The OpenSSL Toolkit,SSLeay,Expat,STLport,mcpp)。
特点:1.平台无关性。
无论客户端或者服务端均可用现在流行的开发语言(C++ /JAVA/C#/php)进行开发,并且屏蔽语言差异性。
现在比较流行的方式是客户端用C#开发,与用C++开发的服务端直接通讯。
2.通讯协议多样性。
现在可选择TCP、UDP、HTTP进行通讯,如果对安全要求较高,可选择SSL对传输的数据进行加密。
3.Ice具有丰富的特性。
其性能远是基于jms 所不能比的。
4.ICE注重的是通讯,异构平台,多语言之间,支持远程对象的通讯中间件。
配网自动化主站中ICE的应用研究发表时间:2019-05-06T10:04:42.810Z 来源:《电力设备》2018年第31期作者:多吉次仁普布坚才[导读] 摘要:对于配网自动化主站系统具有分布式结构,服务比较多并且系统十分复杂的特点,制定了基于ICE中间件的配网自动化主站分布式管理框架。
(国网西藏电力有限公司那曲供电公司西藏那曲市 852000)摘要:对于配网自动化主站系统具有分布式结构,服务比较多并且系统十分复杂的特点,制定了基于ICE中间件的配网自动化主站分布式管理框架。
因此,本文针对配网自动化主站中ICE的应用做出了进一步探究,对ICE技术、ICE技术实现配网主站的分布式管理给出了详细的分析。
关键词:配网自动化;ICE技术;应用分析引言随着我国经济社会的全面发展,电力供应日益紧张,电网规模日益增大,电网数据冗余繁杂,为电网的管理及高效运行造成极大压力。
如何对我国庞大的电网进行高效运营与管理,已成为业内关注的焦点话题。
在信息化背景下,采用先进的电力通信手段提升电力公司的管理效能已成为不可扭转的趋势,智能电网应运而生。
1ICE技术概述该项技术的核心便是分布式应用提供的服务器平台,其中提供的服务包括:IceGrid、IceBox以及IceStorm服务等。
在IceGrid服务当中,起到的作用为定位服务。
IceBox服务器比较简单,其起到的作用为对不同的应用组件进行协调。
第三种服务为订阅服务。
(1)ICE平台当中的开发应用,具备的特征包括:其一,可以支持跨平台的相关部署,使用不同的程序语言进行编辑,支持使用JA V A 语言、C++语言等编程语言,此外还可使用PHP以及Ruby。
(2)ICE支持异步或者异步的编程模式,也支持订阅和发布的编程模式。
此外,还可以使用分布形式的部署、内置负载均衡功能以及网格计算等,还可使用SSL安全加密功能。
(3)ICE还可将UDP或者tcp/ip作为底层当中的传输机制,还可将SSL当做传输工具,使服务器与客户之间存在的信息都进行相应的加密处理。
ICE专题ICE简介ICE(Internet Communications Engine)是一个为现实中程序员而写的中间件平台。
作为一个高性能的互联网通信平台,ICE包含了很多分层的服务和插件(Plug-ins),并且简单、高效和强大。
ICE的自由使用遵从GNU的GPL(GNU General Public Licens)许可的条款。
ICE 也有商业的许可证,如果你想将ICE使用在你的私有产品中,那么你应该使用ICE的商业许可证。
可以联系sales@来获得这方面的更多信息。
ICE当前支持C++、Java、C#、Visual Basic、Python和PHP编程语言,并支持在多种操作系统上运行。
更多的操作系统和编程语言将会在以后的发布中支持。
ICE有以下几部分组成:SliceICE的规范语言,跟CORBA的IDL(Interface Definition Language)等价的东西。
Slice建立了客户端和服务器端共同遵守的契约:接口。
Slice也用来描述对象持久数据。
Slice CompilersSlice的规范语言可以影射成多种编程语言。
目前ICE支持C++,Java,Python,PHP,C#和VB的语言影射。
Ice的客户端和服务器端协同工作,而不会知道分别实现的是何种编程语言。
IceIce的核心库。
在众多的特性当中,Ice核心库通过一个高效的协议(包含TCP/UDP 层上协议压缩)来管理所有的通信任务,为多线程服务器提供了一个灵活的线程池,并且有特别的功能来支持上百万对象的可扩展性。
IceUtil一些常用的功能函数集。
例如Unicode处理和多线程编程,是用C++写成。
IceBox一个专用于ICE应用的应用服务器。
ICEBox可以方便地运行和管理动态加载、共享库或java类的形式Ice的服务。
IcePack一个成熟的服务激活和部署工具。
IcePack能大大简化在异构网络之间部署应用的复杂性。
竭诚为您提供优质文档/双击可除ice协议看明白篇一:基于stun,turn,ice协议的nat穿越基于stun,turn,ice协议的nat穿越分类:Voiptech20xx-10-0820:23115人阅读评论(0)收藏举报stun,turn,ice协议概述stun,turn,ice是ietf提出的处理voip网络中nat穿越问题的协议族。
stun可以处理大部分nat问题,turn是stun协议的一个增强版,专用于处理对称形nat问题,而ice则是综合stun 及turn的产物,是一个框架,综合运用stun和tuRn的结构,它提供可靠的Voip或视频通话配置以及媒体传输,通过一个sip供给/应答模型供端点交换多个候选ip地址和端口(比如私有地址和tuRn服务器地址)。
采用此框架可以完美解决voip中媒体传输中遇到的nat 及防火墙问题,而信令穿越则需要另一套机制,过去人们提出了多种处理nat问题的方案,但都有局限性,采用ice则完全解决了这些问题,ice的另一个特点时能够通过一定机制检测nat类型,从而决定采用何种方案处理,比如对于大多数呼叫,媒体可能直接用p2p方式即可,而有些方案可能不论什么nat类型都用media-relay方式,这种方式增加了端到端延时及丢包概率。
stun和turn都是client/server协议,说白了就是客户端向服务器要自己的公网地址及端口,然后放在自己invite请求的sdp消息体及对invite的200oksdp消息体中。
大多数sip客户端和服务器支持stun协议,所以都有一定缺陷。
/perfectpdl/article/details/763 6067tuRn协议深入剖析概括一下:若一个主机位于nat后面,那么在特定的环境下,它不可能跟其他主机通信。
这种情况下,这台主机有必要通过一个转发的主机来实现通信。
有种协议叫tuRn,允许主机通过转发来和其他主机通信。
基于ICE中间件的应用系统通信框架设计作者:李雪玲
来源:《软件导刊》2017年第01期
摘要摘要:在介绍ICE中间件的基础上,提出了基于ICE的应用系统通信框架设计方案。
该框架负责系统各部分之间的通信,在此框架基础上可以进一步扩展系统功能。
关键词关键词:ICE中间件;应用系统;通信框架
DOIDOI:10.11907/rjdk.162129
中图分类号:TP319文献标识码:A文章编号文章编号:16727800(2017)001009102
0引言
中间件是位于客户机/服务器的操作系统之上的服务程序,这些服务程序具备标准的接口和协议。
相连接的系统即使是不同的OS和硬件,也可以有符合对应接口和协议规范的实现方式。
在具体应用程序的开发过程中,利用中间件提供的跨平台、统一的接口来屏蔽操作系统的多样化,以此实现稳定、安全的支撑平台,从而在异构系统间进行信息交换[1]。
当前主流的面向对象中间件包括Sun公司的EJB/J2EE、Microsoft的COM+/DNA和OMG的
CORBA/OMA等,都有其各自的特点。
ZeroC公司于2003 年开发了一种新的轻量级面向对象的分布式中间件ICE ( Internet Communication Engine)[2]。
1ICE中间件简介
ICE 作为中间件平台为构建面向对象的客户/服务器应用提供支持[3]。
通过Slice (Specification Language for Ice)语言来描述(不是实现)各种类型和对象接口,再由编译器编译到特定实现语言的类型定义和API,使用其提供的应用功能,并与ICE进行交互。
由于这种抽象机制,它提供了跨平台、跨语言的解决方案:客户端和服务器端可以用不同的编程语言来实现,可以在多种操作系统和硬件架构上运行,并可以采用不同的网络通信技术[4]。
目前,最新版本为3.6(ICE-3.6.2在2016年4月发布),支持C++、JAVA、JavaScript、VB、C#、PHP、Ruby、Python等编程语言,并可支持Windows、Unix、Linux、Solaris、OS X等操作系统。
ICE程序是C/S架构的程序,由客户端和服务器端组成,其内部逻辑结构如图1所示。
客户端与服务器端程序都是由应用代码(客户应用和服务器应用)、库代码(客户 ICE 核心、服务器ICE核心和对象适配)以及根据Slice语言定义生成的代码(代理和骨架)混合而成[5]。
2.2通信接口定义
在传统的网络应用系统开发中,开发者需要花费大量时间用于底层通信程序的实现。
例如根据客户端和服务器端各自的操作系统选用与之对应的SOCKET库和API,还需考虑采用
TCP或UDP协议进行通讯时的实现细节等。
本文研究的基于ICE中间件的通信框架(见图2)可以便利地实现应用程序间的通信与数据传输,程序间通信的接口(图中带数字的圆圈)由ICE的SLICE语言定义,对通信双方是透明的。
其中,端口1、3、5、7是程序作为ICE通信的发起端时操作系统为其分配的端口号(每次通信可能会不一样);端口2、4、6、8是程序作为ICE通信的接收端时用于监听的端口号(固定、唯一的)。
程序中,首先声明一个类型为 Ice::Communicator 的 AppSysIC 变量,通过调用Ice::initialize进行初始化,返回一个指向Ice::Communicator对象的指针;接着调用Communicator 实例的AppSys AdapterCmd,创建一个操作命令适配器,用于监听用户操作请求,并调用Communicator 实例的AppSys AdapterData,创建一个数据传输适配器,用于监听用户的数据传输请求;实例化AppSysWorkI对象,创建Servant;将实例化的Servant作为参数传递给适配器的add方法;调用适配器的activate方法激活适配器,服务器则开始处理来自客户端的请求;最后,通过调用wait For Shutdown方法挂起发出调用的线程,直至终止。