綜合技術----ICE

最近做項目,遇到個需求:java調用C++接口。對接方提供了一個xx.ice文件。
經過調查資料發現存在ICE這個中間件可以滿足不同語言之間不同協議的調用。
ice官網:https://zeroc.com。
按照官網指導,來到了java語言選擇頁面。
https://doc.zeroc.com/ice/3.7/hello-world-application/writing-an-ice-application-with-java
做了個簡單的示例,步驟如下:

1.搭建java web工程

我搭建了一個簡單的maven工程(官網是gradle),引入maven包

        <dependency>
            <groupId>com.zeroc</groupId>
            <artifactId>ice</artifactId>
            <version>3.7.6</version>
        </dependency

2.編寫xx.ice文件

[["java:package:com.panda.ltz"]]
module rain
{
    interface MyIce
    {
        string sayMyIce(string msg);
    };
};

詳見如下圖:

3.下載代碼轉換器

下載地址:https://zeroc.com/downloads/ice/3.7/java#windows
我下載的是java版本,windows平臺,詳見如下圖:

下載成功後是一個ice-3.7.6.msi文件,直接雙擊安裝即可。
採用如下命令查看是否安裝成功,命令:slice2java -v

4.將xx.ice文件轉換成java代碼

打開CMD,進入到xx.ice文件目錄,執行代碼轉換命令:slice2java .\MyIce.ice --output-dir ....\src\main\java
發現生成了java代碼,詳見如下圖:

5.編寫服務端代碼

public class TestServer {
    public static void main(String[] args) {
        try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args)) {
            com.zeroc.Ice.ObjectAdapter adapter = communicator.createObjectAdapterWithEndpoints("SimplePrinterAdapter","default -p 10001");
            com.zeroc.Ice.Object object = new MyIceImp();
            adapter.add(object,com.zeroc.Ice.Util.stringToIdentity("SimplePrinter"));
            adapter.activate();
            communicator.waitForShutdown();
        }
    }
}

詳見如下圖:

6.編寫客戶端代碼

public class TestClient {
    public static void main(String[] args) {
        try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args)) {
            com.zeroc.Ice.ObjectPrx base = communicator.stringToProxy("SimplePrinter:default -p 10001");
            MyIcePrx myIcePrx = MyIcePrx.checkedCast(base);
            if (myIcePrx == null){
                throw new Error("Invalid proxy");
            }
            myIcePrx.sayMyIce("hello world");
        }
    }
}

詳見如下圖:

7.啓動服務端與客戶端


自此結束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章