開發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接收返回數據並輸出

 

 到此為止,門外看看而已

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM