Ice 出自ZeroC名门之下, Ice 是一种面向对象的中间件平台。从根本上说,这意味着Ice 为构建面向对象的客户-服务器应用提供了工具、API 和库支持。Ice 应用适合于异构平台环境中使用:客户和服务器可以采用不同的编程语言,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的。
Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火期穿透,通讯屏蔽。因此相比 Corba,DCOM,SOAP,J2EE等的中间件技术,自然是集众多优点于一身,而却没有他们的缺点。
其采用C/S 模式结构,支持同步调用方式和异步调用方式,异步派发调用方式。支持跨语言的对象调用。多种语言之间采用共同的Slice(Specification Language for Ice)进行沟通。支持ice到C,JAVA,C#,VB,Python,Ruby,PHP等多种语言的映射。 Ice具有丰富的特性,其性能远是基于jms 所不能比的。
下面记录一个基于java的ice应用过程
1 下载最新安装包;
http://www.zeroc.com/download.html 根据操作系统和需要选择
我这里安装的是ice-3.3.0
2 安装之后的Ice相关路径:
slice2cpp,slice2java在/bin/下
Ice.jar 存储于/lib/java2/下
相关的Ice的库存储于/lib下.
3.创建ice文件
model.ice
#ifndef _MODEL
#define _MODEL
module com
{
module alan
{
module generated
{
module model
{
/**定义整型数组**/
sequence<int> IntegerArray;
/**自定义Map类型**/
dictionary<string, string> CustomMap;
/**消息类型**/
enum MessageType {ERROR,INFO,WARNING};
/**消息的操作类型**/
enum ActionType {Add,Modifiy,Remove,Stop,Start,Pause};
/** 消息结构 **/
["java:getset"]
struct Message {
/**消息类型**/
MessageType type;
/**消息类型**/
ActionType action;
/**相关id**/
IntegerArray relatedIds;
/**扩展属性**/
CustomMap extention;
};
};
};
};
};
#endif
service.ice
#ifndef _GENERATED
#define _GENERATED
#include <model.ice>
module com
{
module alan
{
module generated
{
interface MessageServiceIce
{
/**
* 向ice服务发送信息
* @param message 消息内容
* @return true 成功 false 失败
*/
string sendMessage(model::Message msg);
};
};
};
};
#endif
4.dos环境下执行(可以搞成.bat文件)
cd E:/workspace/ICETest/slice
E:/Ice-3.3.0/bin/slice2java -I. --output-dir=../src *.ice //生产代码
E:/Ice-3.3.0/bin/slice2html -I. --output-dir=doc *.ice//生产doc文档,可以忽略
5.代码生产后结构(实际应用中可以吧generted 打包放置到client和server端)
导入ice.jar编写代码,MessageServiceIceImpl .java代码:
public class MessageServiceIceImpl extends _MessageServiceIceDisp {
public String sendMessage(Message msg, Current __current) {
String str = msg.getType() +" "+ msg.getAction()+" " + Arrays.toString(msg.getRelatedIds());
return str;
}
}
服务器端代码:
public class IceService {
public static void main(String[] args){
int status = 0;
Communicator ic = null;
try{
ic = Util.initialize(args);
ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("testAdapter", "tcp -h localhost -p 10000");
ObjectImpl object = new MessageServiceIceImpl();
adapter.add(object, ic.stringToIdentity("testAdapter"));
adapter.activate();
ic.waitForShutdown();
} 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);
}
客户端代码:
public class IceClient {
public static void main(String[] args){
int status = 0;
Communicator ic = null;
try{
ic = Ice.Util.initialize(args);
Ice.ObjectPrx base = ic.stringToProxy("testAdapter:tcp -h localhost -p 10000");
MessageServiceIcePrx client = MessageServiceIcePrxHelper.checkedCast(base);
if (client == null)
throw new Error("Invalid proxy");
Map<String ,String > map = new HashMap<String, String>();
Message msg = new Message(MessageType.INFO, ActionType.Add,new int[]{1},map);
System.out.println(client.sendMessage(msg));//这里调用了Service端方法
} 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);
}
}
6.最后我们开始运行Server,再运行Client,看到控制台输出INFO Add [1],一个基本的ice应用就完成了!
关于ICE更多请关注下篇:http://blog.csdn.net/liuzhoulong/article/details/6228333
分享到:
相关推荐
Ice通信框架简介;Ice通信框架简介;Ice通信框架简介
包含了Ice通信框架原理以及开发实践,绝好的入门资料
详细介绍了Ice通信框架的基础结构,对于希望了解ICE通信编程的童鞋很有帮助。
ZeroICE通信框架技术介绍,开发介绍,例子介绍
利用ICE通信中间件构建分布式应用程序开发框架
ICE框架在vs2019上实现的一个可以群聊的小程序。 资源中搭配了ICE在windows上的安装步骤以及在vs上的配置步骤。
ice框架,ice是跨平台跨语言的高可靠性的通信平台
Ice-全面的RPC框架Ice可以帮助您轻松地将软件联网。 通过处理与底层网络编程接口的所有交互,Ice使您可以将精力集中在应用程序逻辑上。 使用Ice时,无需担心细节,例如打开网络连接,对数据进行序列化和反序列化以...
利用ICE通信中间件构建分布式应用程序开发框架 1.什么是ICE? ICE,夏天我最容易想的是冰激淋 : -- ) 在这里我们要讲的可不是冰激淋,而是一种用于分布式程序设计的网络通信中间件ICE(Internate Communications Engine)...
ICE中文文档,主流的通信框架,功能强大,此文档内容详实准确,对于初学者和老手均有学习价值
HARPC(High Availability RPC)是基于Thrift的跨语言、高可用的RPC框架。具备高性能、高可用、轻量级等特点 * 跨语言通信 * 方便的使Java、Python、C++三种程序可以相互通信 * 负载均衡和容灾处理 * 方便的实现...
PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。 PJSIP同时支持语音、视频、状态呈现和即时...
Ice-全面的RPC框架 Ice可以帮助您轻松地将软件联网。 通过处理与低级网络编程接口的所有交互,Ice使您可以将精力集中在应用程序逻辑上。 使用Ice时,无需担心诸如打开网络连接,对数据进行序列化和反序列化以进行...
本文以共享桌面项目为驱动,以渐进迭代的授课方式,遵循RFC标准,深入解析STUN/TURN/DTLS/ICE/RTP/RTCP/SRTP/SRTCP等网络传输协议栈,手把手带你实现WebRTC P2P通信核心技术和ICE网络框架。教学过程中还会设计针对性...
PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。PJSIP同时支持语音、视频、状态呈现和即时通讯...
读取遥测值
实现了ICE框架的STUN/TURN 基于metaRTC6.0最新版二次开发 支持openssl/mbedtls/gmssl等ssl库,可以自定义ssl库,如更换为国产加密算法 可支持4K及以上分辨率 支持H264/H265/OPUS/MJPEG等视音频编码 此demo程序在win...
PJSIP是一个开源的SIP协议库,它实现了SIP、...PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。
OpenSDC是一组库,这些库形成一个通信框架,以促进在高敏锐度环境中医疗设备的分布式系统的开发。 它基于即将发布的SDC标准,该标准由IEEE在IEEE Std 11073-20702-2016(即时医疗设备通信部分20702:Web服务的医疗...
PJSIP是一个开源的SIP协议库,它实现了SIP、...PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。