ICE代码详解

合集下载

ICE简单介绍(InternetCommunicationEngine)

ICE简单介绍(InternetCommunicationEngine)

ICE简单介绍(InternetCommunicationEngine)1. ICE的⼀些背景ICE 是ZeroC的主要产品, 是⼀个object-oriented toolkit,⽤来帮助我们构建分布式应⽤程序,使我们专注于程序的逻辑⽽不是底程⽹络交互的细节ZeroC provides a fast and highly-scalable communications infrastructure for demanding technical applications, such as telecom, defense, finance, on-line entertainment, manufacturing, and process control. ZeroC's core product is Ice, the . Ice is one of the most versatile and powerful distributed computing platforms ever.With an aggressive, no-nonsense licensing model for the Open Source community (GPL, the ), in addition to traditional for commercial customers, ZeroC aims to establish Ice as the leading technical middleware product.ice提供了强⼤的 RPC(remote procedure call)功能,(同步异步Invocation,dispatch), one-way (对tcp,ssl),datagram(udp) ,也就是客户端调⽤了就不管了(fire and forget) 以及提供了除rpc之外的⼏个强⼤的服务,iceGrid, iceStorm....ICE提供的编程模型:4步,定义slice⽂件, slice⽂件⽣成相应语⾔的代码(根据client,server所使⽤的语⾔),编写client-side代码并链接ICE,编写server-side代码并链接ICEICE⼴泛⽀持了各主流语⾔和 platform(OS & compiler)2. ice manual的基本内容这个⽂档是ice主要的⽂档了,编程什么的都参考它,主要分了4个部份; 2.1,概述,ice主要的⼏个部份介绍,在2.2.2(terminology)作为术语解释,包括ice object, ice proxy, ice object简单说是⼀个可以响应client request的实体,它有⾄少⼀个interface,interface则有⼀个或多个operation,每个ice object都有⼀个object identity(object在35章详讲); ice proxy: client要想contact⼀个ice object,就必须hold⼀个ice proxy,它就是ice object的本地代理,所以proxy必须有object的address信息,以及object的identity来定位object,(proxy在32章详讲), 以及⼀个hello world例⼦,告诉我们最简单的ice client,server怎么写2.2 slice(specification language for ice) , slice在client和server之间做了⼀个约定, slice会被c++的预处理器作预处理,所以我们在⽂件中都应该⽤到#ifndef, #define,#endif,另外 #include应该⽤<>,这样slice compiler会在编译选项的-I路径中去查找头⽂件,slice中所有的定义都必须放到module中,不能在全局定义特别的要提到Ice module, 基本上所有的Ice run time时的API, 都是在以slice的形式定义和表达的,在module Ice { }中,⽐如我们下⾯提到的communicator是⼀个slice的interface slice中的类型有basic types , user-defined types(enum, structure, sequence, dictionary), sequence<type>, dictionary<type,type>在c++中被映射为vector和mapinterface是slice中最中⼼最关注的东西了,通过proxy调⽤⼀个operation则就由Ice run time向⽬标object发送了⼀个message, 4.10.4讲了ice所定义的exception的层次结构,根处是Ice::Exception,应该是Ice⾃⼰⽤Slice定义的吧,不知道映射到C++中是不是std::Exception,interface可以⽤extends来派⽣, interface Thing extends BaseThing {}class的内容很丰富,后⾯看,有和interface,struct的⽐较。

Ice.Application 类

Ice.Application 类

参考《Ice 分布式程序设计》马维达译一、main函数Ice run time 的主要进入点main函数的主体结构如下:package Demo;public class Server {public static void main(String[] args) {int status = 0;municator ic = null;try {ic = Ice.Util.initialize(args);//...} catch (Ice.LocalException e) {e.printStackTrace();status = 1;} catch (Exception e) {System.err.println(e.getMessage());status = 1;}if (ic != null) {try {ic.destroy();} catch (Exception e) {System.err.println(e.getMessage());status = 1;}}System.exit(status);}}初始化函数Ice.Util.initialize 接受的参数向量是由操作系统传给main 的。

这个函数扫描参数向量,查找任何与Ice run time 有关的命令行选项,但不会移除这些选项。

如果在初始化过程中出了任何问题, initialize 会抛出异常。

在离开main 函数之前,必须调用Communicator.destroy()。

destroy 操作负责结束Ice run time。

特别地,destroy 会等待任何还在运行的操作调用完成。

此外, destroy 还会确保任何还未完成的线程都得以汇合,并收回一些操作系统资源,比如文件描述符和内存。

决不要让main 函数不先调用destroy 就终止;这样做会导致不确定的行为。

注意,这段代码把对Ice.initialize 的调用放在了try 块中,并且会负责把正确的退出状态返回给操作系统。

ICE Python实例

ICE Python实例

运 行
运 行
1. 先运行客户端接口,双击Client.py,弹出窗 口后闪退。 2. 我们在返回刚才打开的服务窗口,你是不 是看到了一串文字。这就说明你成功了! 如果你感兴趣为啥是写的这个文字,你可 以返回看我们的客户端的代码。你就会发 现惊喜。
谢 谢
联系人:Coco 联系QQ:2892364670
4. PATH的配置也要添加ICE的环境变量配置: %ICE_HOME%\bin
环 境 安 装
5. 替换配置文件IcePy.pyd到C:\Program Files\ZeroC\Ice-3.4.1\python。 6. 安装python2.6.6(不要安装更高级别的版本, 否则实例代码可能不能运行) 7. 记录安装路径C:\Python26
8. 配置环境变量ICEPY_HOME,值为 C:\Program Files\ZeroC\Ice-3.4.1
环 境 安 装
9. 在path中增加Python的安装路径。注意前后 的英文分号
10. 设置PYTHONPATH指向ICE_HOME\python目 录下。值为:%ICE_HOME%\python;
ICE-Python
目 录
一、ICE介绍 二、ICE和Python的实例应用
1. ICE是ZEROC的开源通信协议产品 2. 它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎 3. 是一个面向对象的中间件,使我们能够以 最小的代价构建分布式应用程序。 4. ICE使我们专注于应用逻辑的开发,它来处 理所有底层的网络接口编程。 5. ICE功能:打开网络连接、网络数据传输的 序列化与反序列化、连接失败的尝试次数 等。
1. 新建text文件 2. Copy备注里的内容

ICE

ICE

8.线程支持: 8.线程支持: Ice run time完全是线程化的,其API是 time完全是线程化的,其API是 线程安全的.作为应用开发都,你无需为 开发线程化的高性能客户和服务器付出额 外努力 ; 9.传输机制无关性: 9.传输机制无关性: ICE目前采用TCP/IP和UDP作为传输 ICE目前采用TCP/IP和UDP作为传输 协议.客户和服务器代码都不需要了解底 层的传输机制 ;
ICE服务 ICE服务
ICE有一些功能特性被实现成ICE服务器,自己开发的应用充当的是这 ICE有一些功能特性被实现成ICE服务器, 些服务器的客户端.ICE服务有:IcePack,IceBox,IceStorm,IcePath,Glacier. 些服务器的客户端.ICE服务有:IcePack,IceBox,IceStorm,IcePath,Glacier. 1. IcePack: IcePack: 我们在第 12页提到过, IcePack 是 Ice的定位服务,用于在使用间接 12页提到过, Ice的定位服务,用于在使用间接 绑定时把符号性的 (symbolic)适配器名解析为协议-地址对. 除了这样 symbolic)适配器名解析为协议-地址对. 的定位服务, IcePack还提供了其他特性: IcePack还提供了其他特性: IcePack 允许你注册服务器,进行自动启动:当客户发出请求时,服 务器无需在运行, IcePack 会在第一个客户请求到达时,随需启动服务器. IcePack 支持部署描述符 (deployment descriptors),能让你轻松地配 descriptors),能让你轻松地配 置含有若干服务器的复杂应用. IcePack 提供了一种简单的对象查找服务,客户可用来获取它们感兴趣 的对象的代理.

ice方案

ice方案

Ice方案1. 概述在计算机科学领域,Ice(Internet Communications Engine)是一种面向对象的分布式计算平台,它提供了一种简单而强大的方式来实现分布式应用的开发。

Ice使用一种特定的接口定义语言(IDL)来描述分布式应用程序的接口,然后自动生成客户端和服务器端的代码。

通过使用Ice,开发人员可以轻松地在不同的计算机或操作系统之间进行通信。

Ice具有以下几个主要特点:•面向对象:Ice基于面向对象的编程模型,可以方便地创建分布式对象,并通过远程调用来访问和操作这些对象。

•平台无关性:Ice支持跨平台的开发,可以运行在多种不同的操作系统和编程语言上。

•异步通信:Ice支持异步通信模式,可以提高系统的性能和并发能力。

•安全性:Ice提供了多种安全机制,可以确保通信的机密性和数据的完整性。

2. Ice的基本概念2.1 接口定义语言(IDL)IDL是Ice中用来描述分布式应用程序接口的语言。

开发人员可以使用IDL来定义自己的接口,包括对象的属性、方法、异常等。

Ice的IDL非常类似于其他编程语言中的接口定义,但它是独立于任何编程语言的。

Ice会根据IDL文件自动生成客户端和服务器端的代码。

以下示例是一个简单的IDL文件的例子:module MyModule {struct MyStruct {string name;int age;};interface MyInterface {void sayHello();MyStruct getInfo();};};2.2 代理和对象适配器在Ice中,客户端通过代理来访问远程对象。

代理是客户端调用的一个本地对象,它负责将方法调用转发给远程对象,并将结果返回给客户端。

服务器端使用对象适配器来注册和激活对象,并将对象与特定的网络地址绑定。

对象适配器可以理解为一个“中间人”,它负责接收客户端的请求,并将其转发给实际的对象进行处理。

2.3 通信协议和传输方式Ice支持多种通信协议和传输方式。

线切割FANUCα-1ice代码

线切割FANUCα-1ice代码

功能FANUC α-1ice格式G04暂停(指定时间停止G04 P-- or G04 x--G92设定坐标系G92 X--Y--I--J--G93设定局部坐标系G93 X--Y--G28机床原点(参考位置)返回G28 X--Y--U--V--G29从参考位置返回G29 X--Y--U--V--G30第二第三第四参考位置返回G30 P--X--Y--U--V--G32参考位置设定-A G32 P- (设定当前位置)G33参考位置设定-B G33 P--X--Y--U--V-- (设定任意位置) G53在机床坐标定位G53 X--Y--U--V--G10设定偏置或加工条件G10 P--R-- (设定偏置) G10 P--X-Y-Z-U-V-W-I-J-K-(设定加工条件)G11设定加工条件G11 P--X-Y-Z-U-V-W-G00快速移动G00 X--Y--U--V--G01直线插补(加工进给)G01 X--Y--U--V--G02圆弧插补(顺时针旋转)G02 X--Y--I--J--U--V--K--L--G03圆弧插补(逆时针旋转)G03 X--Y--I--J--U--V--K--L--G17指定平面(XY平面)G17G90绝对指令G90 (绝对坐标指令)G91增量指令G91 (相对坐标指令)G22软限制ON G22 X--Y--I--J--G23软限制OFF G23G94定速进给G94 X--Y--F--G95伺服进给G95 X--Y--G20英制输入G20G21米制输入G21G40取消偏置G40 X--Y--G41偏置左G41 X--Y--G42偏置右G42 X--Y--G50取消锥度倾斜G50 X--Y--G51锥度倾斜方向左G51 X--Y--G52锥度倾斜方向右G52 X--Y--G60上下独立转角R G60 R----K----G61圆锥形转角R G61 R----G62圆锥形转角R G62 R----G63圆锥形转角R G63 R----G48插入自动转角R ON G48G49插入自动转角R OFF G49G54工件偏置的指令(工件坐标系)G54 or G54 P--G55P02的工件偏置的指令(工件坐标系)G55G56P03的工件偏置的指令(工件坐标系)G56G57P04的工件偏置的指令(工件坐标系)G57G58P05的工件偏置的指令(工件坐标系)G58G59P06的工件偏置的指令(工件坐标系)G59G70端面定位G70 P--X-- or G70 P--Y-- or G70 P--B--G71孔中心定位G71 P--X--B-- or G71 P--Y--B--代码P480G72凹槽中心定位G72 P--X-- or G72 P--Y--G74定位到圆中心 Pn G74 P-G75在相对坐标系定位G75 X--Y--G76定位到端面定位点G76 P--X--Y--G77定位到定位点G77 P--X--Y--G78定位到工件的角部G78 X--Y--G79计算工件倾角\计算圆中心Pn G79 Q--B-- G79 Pn BO or G79 pn B1 X--Y--G170端面定位(高精度定位)G170P--X-- or G70 P--Y--G171孔中心定位(高精度定位)G171P--X-- or G70 P--Y--G172凹槽中心定位(高精度定位)G172P--X-- or G70 P--Y--G174保存工件坐标系位置G174 P--X--Y--G65用户宏程序调用G65 P---- L--自变量1 自变量2…G66宏程序连续调用 ON G66 P---- L--自变量1 自变量2…G67宏程序连续调用 OFF G67。

ICE介绍

ICE介绍

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个人整理资料

Ice个人整理资料

Ice个人整理资料1.客户与服务器(Clients and Servers)2.Ice 对象(Ice Objects )3.代理(Proxies )4.串化代理(Stringified Proxies )代理中的信息可以用串的形式表示。

例如:SimplePrinter:default -p 100005.直接代理(Direct Proxies )协议标识符(比如TCP/IP 或UDP)针对具体协议的地址(比如主机名和端口号)6.间接代理(Indirect Proxies)7. 同步方法调用(Synchronous Method Invocation)8. 异步方法调用(Asynchronous Method Invocation)9. 异步方法分派(Asynchronous Method Dispatch)10. 单向方法调用(Oneway Method Invocation )11. 成批的单向方法调用(Batched Oneway Method Invocation )12. 数据报调用(Datagram Invocations)13. 成批的数据报调用(Batched Datagram Invocations)14. 运行时异常(Run-Time Exceptions )15. 用户异常(User Exceptions )16. 属性(Properties )17. 骨架(skeleton)代码也是根据你的Slice 定义生成的,因此,与你用Slice 定义的对象和数据的类型是对应的。

骨架代码是客户端代理代码的服务器端等价物:它提供了向上调用(up-call)接口,允许Ice runtime 把控制线程转交给你编写的应用代码。

骨架也含有整编和解编代码,所以服务器可以接收客户发送的参数,并把参数和异常返回给客户。

18. 对象适配器(object adapter)是专用于服务器端的Ice API 的一部分:只有服务器才使用对象适配器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

服务器端代码:主要包括几个大的类。

Ice::Communicator类:
Ice run time的主要进入点是由本地接口
Ice::Communicator来表示的。

和在客户端一样,在你在服务器中做任何别的事情之前,你必须调用
Ice::initialize,对Ice run time进行初始化。

Ice::initialize 返回一个智能指针,指向一个Ice::Communicator实例:int main(int argc, char * argv[])
{
Ice::CommunicatorPtr ic = Ice::initialize(argc, argv); // ...
}
在离开你的main函数之前,你必须调用Communicator::destroy。

destroy操作负责结束Ice run time。

特别地,destroy会等待任何还在运行
的操作调用完成。

此外,destroy还会确保任何还未完成的线程都得以汇合(joined),并收回一些操作系统资源,比如文件描述符和内存。

决不要让你的main函数不先调用destroy就终止;这样做会导致不确定的行为。

Ice::Application类:
#include <Ice/Ice.h>
class MyApplication : virtual public Ice::Application { public:
virtual int run(int, char * []) { //主要是来实现该run 的方法。

// Server code here...
return 0;
}
};
int
main(int argc, char * argv[])
{
MyApplication app;
return app.main(argc, argv);
}
Ice::Service类:
使用Ice::Service类的Ice应用至少要定义一个子类,并重新定义 start成员函数;服务必须在这个函数里执行其启动活动,比如处理命令
行参数、创建对象适配器、注册servants。

应用的main 函数必须实例化这个子类,调用其main成员函数,把程序的参数向量作为参数传给它。

下面的例子给出了一个最小限度的Ice::Service子类:
#include <Ice/Ice.h>
#include <Ice/Service.h>
class MyService : public Ice::Service {
protected:
virtual bool start(int, char * []);
private:
Ice::ObjectAdapterPtr _adapter;
};
bool MyService::start(int argc, char * argv[])
{
_adapter
= communicator()->createObjectAdapter("MyAdapt er");
_adapter->addWithUUID(new MyServantI); //用UUID来指定1个servant。

_adapter->activate(); //1个适配器包含1个servant还是多个?
return true;
}
int main(int argc, char * argv[])
{
MyService svc;
return svc.main(argc, argv);
}
linux守护进程命令行:--daemon,--noclose(阻止ice::service关闭无用的文件描述符),--nochdir(阻止ice::service变更当前目录)
Servant类:继承于ice::object类。

相关文档
最新文档