开发zeroc ice应用入门(java开发ice应用,python开发ice应用,java与python结合开发ice服务)
ice作为一种rpc框架,为主流平台设计,包括Windows和Linux,支持广泛的语言,包括C++,Java,C#(和其他.Net的语言,例如Visual Basic),Python,Ruby,PHP和ActionScript。
安装ice
1.官网下载地址 https://zeroc.com/downloads/ice
2.安装程序,本文安装位置E:\Program Files\ZeroC\Ice-3.6.3
3.配置环境变量
计算机->属性->高级系统设置->环境变量
1)新建立一个ICE_HOME,变量值为安装路径

2)在Path中添加”%ICE_HOME%\bin“

3)检验
配置完成之后打开cmd

出现版本号即为安装并配置完成
java结合ice开发
创建一个maven管理的java项目
在pom.xml中添加依赖
<!-- https://mvnrepository.com/artifact/com.zeroc/ice -->
<dependency>
<groupId>com.zeroc</groupId>
<artifactId>ice</artifactId>
<version>3.6.3</version>
</dependency>
依赖最好对应ice版本
快速查找依赖的方法 直接百度 maven+多需要的依赖名称
如maven ice




在项目文件夹下创建slice文件夹 创建一个文件**.ice
本项目示例Hello.ice
[["java:package:com.test.ice.service"]] // 定义java包名 父结构
module demo //模块包名
{
interface Hello //接口服务名称
{
string sayHello(string s); //具体的方法
};
};
1)使用slice2java编译ice文件生成java代码
在ice所在文件夹打开cmd或者shell,使用以下命令 ps:--output-dir 输出文件的目录
slice2java .\Hello.ice --output-dir ..\src\main\java
如果看不到代码,刷新项目即可
2)使用eclipse插件生成代码
eclipse – Help – Marketplace 搜索ice,第一个插件install

安装完成之后重启eclipse
重启之后,选中项目名称右键选中Ice builder -> add ice builder
则生成了ice的Java代码
编写程序
在生成的代码中可以看到"_ice文件接口名称Disp.java"的文件,例如本次项目为_HelloDisp.java
1)接口实现类HelloImpl 继承_HelloDisp.java
import com.test.ice.service.demo._HelloDisp;
import Ice.Current;
public class HelloImpl extends _HelloDisp{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String sayHello(String s, Current __current) {
System.out.println(s);
return "hello,"+s;
}
}
ps:接下来的话可以忽略,最好是与接口不是同一项目,也就是api即接口项目,server项目,client项目,将接口项目以maven的方式打包成jar安装到本地库,具体操作实例https://www.jianshu.com/p/5ce9d1567fee,其他项目添加接口项目依赖
2)服务启动类Server
import com.test.ice.service.demo.impl.HelloImpl; import Ice.Communicator;
import Ice.ObjectAdapter; public class Server { public static void main(String[] args) {
int status = 0;
Communicator ic = null;
try{
System.out.println("Server starting...");
ic = Ice.Util.initialize(args);
ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("iceTest", "default -p 10006");
Ice.Object object = new HelloImpl();
adapter.add(object, ic.stringToIdentity("hello"));
adapter.activate();
System.out.println("Server start success.");
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);
} }
3)客户端client
import com.test.ice.service.demo.HelloPrx;
import com.test.ice.service.demo.HelloPrxHelper; public class Client { public static void main(String[] args) {
int status = 0;
Ice.Communicator ic = null;
try {
ic = Ice.Util.initialize(args);
Ice.ObjectPrx base = ic.stringToProxy("hello:default -p 10006");
HelloPrx hello = HelloPrxHelper.checkedCast(base);
if (hello == null) {
throw new Error("Invalid proxy");
} String s = hello.sayHello("World!");
System.out.println(">>" + s);
} 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);
}
}
4)运行程序
首先运行服务启动类Server,

启动客户端Client
服务端接受到数据

客户端接收到服务端返回的数据

简单的java 结合ice开发到此介绍结束,具体深入后续一起努力哦
python开发ice项目
1.安装ice所需的依赖包
pip install zeroc-ice
2.编写ice文件
module demo
{
interface Hello
{
string sayHello(string s);
};
};
3.编写Server启动程序
#!/usr/bin/env python
# coding=utf-8
import sys, Ice # 动态加载slice文件并编译
Ice.loadSlice("./demo.ice") #ice文件中的模块名称
import demo
## 实现一个服务类
class HelloImpl(demo.Hello):
def sayHello(self, s, current=None):
print s
msg ="Hello,"+s
return msg with Ice.initialize(sys.argv) as communicator:
print "Server starting..."
adapter = communicator.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10006")
object = HelloImpl()
adapter.add(object, communicator.stringToIdentity("hello"))
adapter.activate()
print "Server start success."
communicator.waitForShutdown()
4.编写客户端启动程序
#!/usr/bin/env python
# coding=utf-8
import sys, Ice
Ice.loadSlice("./demo.ice")
import demo with Ice.initialize(sys.argv) as communicator:
base = communicator.stringToProxy("hello:default -p 10006")
printer = demo.HelloPrx.checkedCast(base)
if not printer:
raise RuntimeError("Invalid proxy")
print printer.sayHello("World!")
5.运行程序
1)启动server程序

2)启动client程序

3)server接受到客户端发送来的数据并输出

4)client接受到server返回的数据并输出

java与python服务互相调用
java启动server服务,python客户端程序调用服务
1)启动java server服务

2)启动python client服务

3)server服务接收数据并输出

4)client接收返回数据并输出

到此为止,门外看看而已
开发zeroc ice应用入门(java开发ice应用,python开发ice应用,java与python结合开发ice服务)的更多相关文章
- 用Python开发Zeroc Ice应用
Zeroc Ice简介 Zeroc ICE(Internet Communications Engine ,互联网通信引擎)是目前功能比较强大和完善的RPC框架,支持跨平台.跨语言调用.它非常灵活 ...
- Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】
http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...
- 01--Java语言概述与开发环境 最适合入门的Java教程
Java 程序运行机制 编译型语言: 使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻 译"成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该 ...
- Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)
Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...
- Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...
- Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通
Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium R ...
- CXF-JAX-RS开发(一)入门案例
一.简介 资源驱动.基于HTTP协议[按照标准指定URL,就可以访问数据]以XML|JSON格式传输数据. 二.quickstart 1.创建maven project[Packaging:jar] ...
- SpringBoot开发二十-Redis入门以及Spring整合Redis
安装 Redis,熟悉 Redis 的命令以及整合Redis,在Spring 中使用Redis. 代码实现 Redis 内置了 16 个库,索引是 0-15 ,默认选择第 0 个 Redis 的常用命 ...
- [刘阳Java]_避开环境配置快速的使用Java的开发工具_第5讲
我们一般学习Java都应该遵循通过系统的命令工具来编译Java程序,然后对编译好Java程序进行运行,这个是非常好的习惯.但是随着后期学习Java技术的深入我们也得像Java的IDE工具屈服.所以,可 ...
随机推荐
- 100 IncDec序列
IncDec序列 Description 给定一个长度为 n 的数列 a1,a2,-,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一. 求至少需要多少次操作才能使数列中 ...
- Linq查询语法(1)
转:http://www.cnblogs.com/ahao214/archive/2013/01/22/2871044.html LINQ的基本格式如下所示:var <变量> = from ...
- (4.30)全面了解触发器:DML、DDL、LOGON触发器
DML.DDL.LOGON触发器 转自:https://www.cnblogs.com/seusoftware/p/9120632.html 触发器可以理解为由特定事件触发的存储过程, 和存储过程.函 ...
- opencv中画圆circle函数和椭圆ellipse函数
1. void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, ...
- 从ES6重新认识JavaScript设计模式: 装饰器模式
1 什么是装饰器模式 向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式(Decorator Pattern),它是作为现有的类的一个包装(Wrapper). 可以将装饰器理解 ...
- LeetCode103. 二叉树的锯齿形层次遍历
103. 二叉树的锯齿形层次遍历 描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 示例 例如,给定二叉树: [3,9,2 ...
- wxpython菜单栏、子菜单栏、弹出菜单栏、状态栏小程序学习源代码分享
#coding=utf-8 import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1, ...
- JVM虚拟机基础知识
1. Java的发展 Java之父:詹姆斯·高斯林 2. Java的技术体系 Java 程序设计语言 JVM class文件格式 编译器 Java API 第三方Java类库 三个版本: Java S ...
- SSM商城系统开发笔记-问题01-通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明。
配置搭建完后进行Post请求测试时报错: Caused by: org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 29; cvc ...
- swift实现线程安全的栈和队列
实现一个线程安全的栈 这里使用数组来存储栈的数据.不足之处在于本例中的Stack可以无限扩容,更好的是初始化时候指定一个最大容量,防止不断扩容申请内存导致内存不够的问题.这里的线程安全使用一个串行队列 ...