Ice客戶端的同步及AMI異步模式-JAVA

 

廢話不多說,最簡單的源碼比較一下是最快的方法.

1、slice文件 Demo.ice

#ifndef HELLO_ICE
#define HELLO_ICE

module Demo {  
    interface Printer {  
        ["ami"] string printString(string s);   //["ami"] 頭表示此方法是異步的,客戶端無需等待立即返回;
    };  
};

#endif

 

2、slice2java 生成骨架代碼

 

3、接口實現:PrinterI.java

import Ice.*;
import Demo.*;


public class PrinterI extends _PrinterDisp{  

 public String printString(String s, Current __current) {  
  // TODO Auto-generated method stub  
  StringBuilder sb=new StringBuilder(s);  
  s = sb.reverse().toString();   //反轉字符串
  return s;  
 }
}

4、異步回調實現:APP.java

import Demo.*;

public class APP extends AMI_Printer_printString
{
 public void ice_response(String __ret){
  System.out.println("printString完成~"+__ret);
 }

 public void ice_exception(Ice.LocalException ex){
  System.out.println(ex.toString()+"出錯啦~");
 }
}

5、服務端 Server.java

public class Server {  
 public static void main(String[] args) {  
  int status = 0;  
  Ice.Communicator ic = null;  
  try {  
   ic = Ice.Util.initialize(args);// 初始化參數
   Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("simplePrinterAdapter", "default -h 10.147.6.85 -p 10000");// 創造對象適配器  
   Ice.Object objcet = new PrinterI();// 創建servant對象
   adapter.add(objcet, Ice.Util.stringToIdentity("simplePrinter"));// 適配器添加一個新的servant,給servant對象取個名字  
   adapter.activate();
   System.out.println("connection success");  
   ic.waitForShutdown();
  } catch (Ice.LocalException e) {  
            e.printStackTrace();  
             status = 1;  
     } catch (Exception e) {  
             System.err.print(e.getMessage());  
             status = 1;  
     } finally {  
            if (ic != null) {  
                 ic.destroy();  
            }  
     }  
         System.exit(status);  
 }  
}  

 

6、客戶端:Client.java


import java.util.*;
import Demo.*;

public class Client {  
 /** 
 * @param args 
 */ 
 public static void main(String[] args) {  
  int status = 0;  
  Ice.Communicator ic = null;  
  try {  
   ic = Ice.Util.initialize(args);  
   Ice.ObjectPrx base = ic.stringToProxy("simplePrinter:default -h 10.147.6.85 -p 10000" + "");  
   PrinterPrx printer = PrinterPrxHelper.checkedCast(base);  
   if (printer == null) {  
    System.out.println("invalid proxy");
   }  
   String out = printer.printString("I love you");//同步調用
   System.out.println(out);
   //printer.printString_async(new APP(), "Hello World!");//異步調用,基本上總是在下面的打印輸出'做點其他事情~'後輸出
   System.out.println("做點其他事情~");

   //Scanner input = new Scanner(System.in);
   //String str = input.next();

  } catch (Ice.LocalException e) {  
   // TODO: handle exception  
   e.printStackTrace();  
   status = 1;  
  } catch (Exception e) {
   System.err.print(e.getMessage());  
   status = 1;  
  } finally {  
   if (ic != null) {  
    ic.destroy();  
   }
  }
  System.exit(status);  
 }  
 
}

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