主题:ice完整的Demo,Java+PHP

Java代码
  1. 首先介绍:  
  2. ICE 是一个面向对象的中间件平台。从根本上讲,这意味着ICE提供了一些工具、API和库用以开发面向对象的客户端-服务器的应用程序。ICE应用程序适合于 用在各种异构的环境中:客户端和服务器可以用不同的语言编写,能够运行在不同的操作系统、不同体系结构的机器上,可以用不同的网络技术进行通讯(大概10种以上)。这些程序的源代码可以在不同的开发环境之间移植。  
  3. 在我看来其实是dcom和CORBA的封装。他和gearman和thrift类似。  
  4. 一:  
  5. 首先确保各个编译器安装成功。检测  
  6. Slice2java ,slice2cpp,slice2C#,slice2py,slice2vb,slice2rb等  
  7. 开放端口默认开放10000  
  8. 二编写Ice脚本:  
  9. module Demo{  
  10.   interface Printer{  
  11.    string printString(string s);  
  12.   };  
  13. };  
  14. 运行slice2java Demo.ice;  
  15. 三,编写servant类的PrinterI:  
  16. public class PrinterI extends _PrinterDisp{  
  17.   
  18.     public String printString(String s, Current __current) {  
  19.         // TODO Auto-generated method stub  
  20.         StringBuilder sb=new StringBuilder(s);  
  21.         s=sb.reverse().toString();  
  22.         return s;  
  23.     }  
  24.   
  25. }  
  26. 编写Server:  
  27. public class Server {  
  28.     public static void main(String[] args) {  
  29.         int status = 0;  
  30.         Ice.Communicator ic = null;  
  31.         try {  
  32.             ic = Ice.Util.initialize(args);// 初始化参数  
  33.             Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(  
  34.                     "simplePrinterAdapter""default -p 10000");// 创造对象适配器  
  35.             Ice.Object objcet = new PrinterI();// 创建servant对象  
  36.             adapter.add(objcet, Ice.Util.stringToIdentity("simplePrinter"));// 适配器添加一个新的servant,给servant对象取个名字  
  37.             adapter.activate();  
  38.             System.out.println("connection success");  
  39.             ic.waitForShutdown();  
  40.         } catch (Ice.LocalException e) {  
  41.             e.printStackTrace();  
  42.             status = 1;  
  43.         } catch (Exception e) {  
  44.             System.err.print(e.getMessage());  
  45.             status = 1;  
  46.         } finally {  
  47.             if (ic != null) {  
  48.                 ic.destroy();  
  49.             }  
  50.         }  
  51.         System.exit(status);  
  52.     }  
  53. }  
  54. 四,运行服务器端:在windows下建立的Java工程 打成ice_1.jar包放到Linux上运行  
  55. 命令:java –cp ./Ice.jar:ice_1.jar Demo.Server//注意Ice.jar包放到ice_*.jar的同一个目录,(特别注意不要再按ctr+c在当前窗体运行客户端,按ctr+c它会中断服务器,NND这里把握搞得郁闷)  
  56. 五,编写客户端(Java和PHP版)  
  57. Java版:  
  58. public class Client {  
  59.   
  60.     /** 
  61.      * @param args 
  62.      */  
  63.     public static void main(String[] args) {  
  64.         int status = 0;  
  65.         Ice.Communicator ic = null;  
  66.         try {  
  67.             ic = Ice.Util.initialize(args);  
  68.             Ice.ObjectPrx base = ic.stringToProxy("simplePrinter:default -p 10000" +  
  69.                     "");  
  70.             PrinterPrx printer = PrinterPrxHelper.checkedCast(base);  
  71.             if (printer == null) {  
  72.                 System.out.println("invalid proxy");  
  73.             }  
  74.             String out = printer.printString("I love you");  
  75.             System.out.println(out);  
  76.         } catch (Ice.LocalException e) {  
  77.             // TODO: handle exception  
  78.             e.printStackTrace();  
  79.             status = 1;  
  80.         } catch (Exception e) {  
  81.             System.err.print(e.getMessage());  
  82.             status = 1;  
  83.         } finally {  
  84.             if (ic != null) {  
  85.                 ic.destroy();  
  86.             }  
  87.         }  
  88.         System.exit(status);  
  89.     }  
  90.   
  91. }  
  92.   
  93. PHP版:  
  94. 先确保PHP安装成功再在PHP.ini文件下增加  
  95. 1.extension=IcePHP.so  
  96. ice.profiles = /etc/ice.prop//注意要 先建立ice.prop文件  
  97. 2.在ice.prop里增加:[demo]  
  98. ice.slice=/options/demo.ice//注意demo.ice放置的目录  
  99. 3.PHP:  
  100. <?php  
  101. ini_set("display_errors","1");  
  102. global $ICE;  
  103. Ice_loadFile("demo");  
  104. try {  
  105.     $Base=$ICE->stringToProxy("SimplePrinter:default -p 10000");  
  106.     $Manager=$Base->ice_checkedCast("::Demo::Printer");  
  107.     $Properties=$Manager->printString("helloworld");  
  108.     echo $Properties;  
  109.    }  
  110.    catch( Exception $e ) {  
  111.      print_r($e);  
  112.    }  
  113. ?>  
  114.   
  115. 6,测试Java先:java –cp ./Ice.jar:ice_2.jar Demo.Client//把客户端打包成ice_2.jar,  
  116. 测试:PHP,把PHP文件放到PHP环境下 在浏览器访问。 


导航