什么是ice
ice是一个面向对像的中间件平台,因此,这意味着ice提供了一个工具,一些api和一些类库用来构造面向对像蝗基于client-server 的应用程序,因此,ICE适用于在异构环境中使用,他的client和server可以用不同的语言来写,比如server用java来作开发,client用php来作展现,这样php和java可以能过ice来进行操作。更有意思的是ice可以运行于不同的操作系统和机器架构,如 winodws,linux,unix...
我认为最重要的一点就是ice是开源的,他的文档非常的完善,当你看他的文档的时候,你就会感到无比的痛苦,因为他的文档太完善了。
ice安装与配置
因为我在winodws上面开发,开发完成后才放到linux上面去跑程序,所以开发与配置都是在winodws上面完成的,等到对ice了解的基本差不多了,会放到linux上面去。
在windows上面安装很简单,先去ice的官网下载一个windows安装版本就可以。
要注意的是最新版本ice 3.4.1支持的php版本是php5.3.1 下载地址
在windows上面安装很简单,下一步就可以了,要记注你的安装目录,我把它安装到了C:/ZeroC 下面,这里假设你已经安装好了apache和php环境
第一步,把ice的bin目录添加到环境变量
如果设置个jdk的环境变量,那这个也是一样的,如我把这个添加到环境变量“C:/ZeroC/Ice-3.4.1/bin”,设置环境变量的文章google下会很多。
第二步,让php支持ice
修改php.ini文件,在文件中添加如下扩展 extension = php_ice.dll
把ice下面bin目录下的php_ice.dll copy到了php ext目录
第三步,再php.ini文件中添加 ice对php支持的库
ice对php支持的库文件在ice的安装目录下面的php文件夹中
在php.ini的inclue_path中添加此目录即可如:include_path = ".;E:/php/xampp3/xampp/php/PEAR;C:/ZeroC/Ice-3.4.1/php"
至此,安装与配置已经完成
检验是否安装正确
如果要检验是否安装正确,最好就是来一个“Hello world”
因此ice最主要的目标就是让不同语言写的程序互通,所以用java 和 php能过ice来互相调用是最好的证明了。
一、写的个java程序,作为Server
1、定义一个Printer.ice格式的文件,在文件中添加如下代码
- module Demo
- {
- interface Printer
- {
- void printString(string s);
- };
- };
2、运行slice2java命令:slice2java Printer.ice
3、你将造成一个Demo的文件夹,里面有很多的java文件
4、新建一个PrinterI.java文件,添加如下代码
- {
- public void printString(String s, Ice.Current current)
- {
- System.out.println(s);
- }
- }
5、新建一个Server.java文件,添加如下代码
- 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 -p 10000");
- Ice.Object object = new PrinterI();
- adapter.add(
- object,
- ic.stringToIdentity("SimplePrinter"));
- adapter.activate();
- ic.waitForShutdown();
- } catch (Ice.LocalException e) {
- e.printStackTrace();
- status = 1;
- } catch (Exception e) {
- System.err.println(e.getMessage());
- status = 1;
- }
- if (ic != null) {
- // Clean up?
- //?
- try {
- ic.destroy();
- } catch (Exception e) {
- System.err.println(e.getMessage());
- status = 1;
- }
- }
- System.exit(status);
- }
- }
6、编译java代码,要注意的是要编译和运行都依赖与ice.jar这jar包,所以编译和运行的时候都要把它添加到classpath中去,
编译很简单,我是这样弄的 javac -classpath classes;C:/ZeroC/Ice-3.4.1/lib/Ice.jar; Server.java PrinterI.java Demo/*.java
二、php调用java方法
1、运行命令:slice2php printer.ice 会生成Printer.php文件,
2、新建一个client.php文件,添加如下代码
- require 'Ice.php';
- require 'Printer.php';
- $ic = null;
- try
- {
- $ic = Ice_initialize();
- $base = $ic->stringToProxy("SimplePrinter:default -p 10000");
- $printer = Demo_PrinterPrxHelper::checkedCast($base);
- if(!$printer)
- throw new RuntimeException("Invalid proxy");
- $printer->printString("Hello World!");
- }
- catch(Exception $ex)
- {
- echo $ex;
- }
- if($ic)
- {
- // Clean up?
- try
- {
- $ic->destroy();
- }
- catch(Exception $ex)
- {
- echo $ex;
- }
- }
- ?>
三、运行
1、首先运行java的Server文件,运行时一定要注意classpath问题
java -classpath classes;C:/ZeroC/Ice-3.4.1/lib/Ice.jar; Server
这时你将不会看到任何输出
2、访问php的client页面,你也看不到有任何输出,但是当你通过访问php的client的时候,你会看到 server的运行窗口输出
“Hello World!”,这证明你的php已经成功的调用了java的方法。
来源:oschina
链接:https://my.oschina.net/u/47255/blog/36265