Ice介绍及分析

    ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作,将基础对象操作和数据库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE的数据层可以在未来方便的进行扩展。ICE支持分布式的部署管理,消息中间件,以及网格计算等等。
服务间经常会需要相互调用数据,例如BOSS这边会调用AEP那边的接口(查询用户信息和公司信息等等)。由于设计时这些服务仅仅基于统一的用户中心,服务间基本是独立的,所以要实现这些调用只能在每个服务上新增为其它服务提供服务的服务。基于http和xml的远程调用,用了一段时间,发现维护成本和访问性能都存在问题。

优点:
1、支持不同语言之间通讯的。也就是说服务器端拿着ICE的文档去编写服务器端的代码,它可能采取c++也可能采用C#也可能采用java来编写服务器端的代码。而客户端用户拿着ICE的文档,去编写客户端的代码。而他们编译出来的代码是可以相互通信的,因为他们采用了同一个桥梁ICE。
2、传统的SOCKET编程,我们可以更为清楚程序的性能,能够更直接的操控SOCKET的设置,比如发送超时时间,接受BUFFER的大小,以及进行自己的协议加密。但是由于其调试成本较高,且不易于分布式部署。ICE3.2 以后,由于采用了epoll 模型,其通信层的性能提升较为明显。而且其相较于SOCKET编程一个很明显的优势是便于调试。

特性:
 面向对象的规范语言。
 易于使用的C++和Java映射。
 非常高效的协议,还可以进行协议压缩。
 异步方法调用(asynchronous method invocation)和异步方法分派  (asynchronous method dispatch)。
 动态的传输插件。
 TCP/IP和UDP/IP支持,以及基于SSL的安全性。
 Ice防火墙解决方案,支持回调。
 使用XML的自动持续(persistence),包括对版本管理的支持。
 类型化的消息传递服务。  
 软件修补和更新服务。
 完善的部署工具。
 GPL授权或商业授权(商业用途)。
 支持Windows 2000/XP、Linux和Solaris操作系统。


当BOSS访问量大时还是用ICE实现性能更高

配置实现:  Client-Server之间的通信采用接口的方式,开发人员无需关注传输和接口的协议处理
一: 定义接口文件
二:  实现服务
三:  调用服务

实现: 
 前提:PATH环境配置C:\Ice-3.3.0\bin;  (加入我的环境在C盘下面)
 命令:slice2java XXXX.ice   (java版的)
   通过上述命令
   就可以在相同文件夹下面生成一系列的java文件,查看源码可以发现就是一些   final,abstract类以及接口。

 导包:Ice.jar 核心包
 服务器端:
  
        int status = 0;
        //定义通信器
        Ice.Communicator ic = null;
        try {
            //经过测试args里面的参数一直为空
            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 (Exception e) {
            e.printStackTrace();
            status = 1;
        }
        //通信器关闭
        if (ic != null) {
            try {
                ic.destroy();
            } catch (Exception e) {
                System.err.println(e.getMessage());
                status = 1;
            }
        }
        System.exit(status);


 实体对象
public class PrinterI extends Demo._PrinterDisp(该对象是刚才编译生成的)


 客户端
 
        int status = 0;
        //定义通信器
        Ice.Communicator ic = null;
        try {
        //初始化   
            ic = Ice.Util.initialize(args);
         //访问服务器
            Ice.ObjectPrx base = ic.stringToProxy("SimplePrinter:default -p 10000");
            Demo.PrinterPrx printer = Demo.PrinterPrxHelper.checkedCast(base);
            if (printer == null)
                throw new Error("Invalid proxy");

            printer.printString("Hello World!");
        } 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);




 先启动服务器 在启动客户端实现交互

你可能感兴趣的:(编程,应用服务器,linux,socket,XP)