ICE comes later

windows的玩法: http://www.th7.cn/Program/php/201208/89438.shtml


目前的新版本Ice-3.5.1-3.msiEverything needed to develop Ice applications on Windows in all supported programming languages. This installer includes executables, debug and release DLLs, header files, import libraries, Java classes, sample programs, third-party dependencies, and the Ice Visual Studio Add-In. 最佳支持的匹配有一个表,包括对VS.NET编译出来的DLL/C++ --有点疑惑到底是C#,还是C++的逻辑业务层PHP Version 5.3.27RequirementsC++ Visual Studio 2010 SP1, Visual C++ 2010 SP1 Express, Visual Studio 2012, Visual C++ 2012 Express, or Visual Studio 2013.NET Visual Studio 2010 SP1, Visual Studio 2012, or Visual Studio 2013.NET Compact Framework Visual Studio 2008 SP1Silverlight Visual Studio 2010 SP1Java Java6 or Java7Android Android 2.3 or laterPython Python 3.3.2Ruby Ruby 1.9.3PHP PHP 5.4.20


Requirements
C++ Visual Studio 2010 SP1, Visual C++ 2010 SP1 Express, Visual Studio 2012, Visual C++ 2012 Express, or Visual Studio 2013
.NET Visual Studio 2010 SP1, Visual Studio 2012, or Visual Studio 2013
.NET Compact Framework Visual Studio 2008 SP1
Silverlight Visual Studio 2010 SP1
Java Java6 or Java7
Android Android 2.3 or later
Python Python 3.3.2
Ruby Ruby 1.9.3
PHP PHP 5.4.20


实现一个php开发客户端,通过ice中间件访问服务器端的demo程序代码如下:
<?php   

require 'Ice.php';   

ini_set("display_errors","1");   

global $ICE;   

Ice_loadFile("profile_Conn");   

try {   
  $Base=$ICE->stringToProxy("SimpleConn:default -h 172.16.0.210 -p 10000");   
  $Manager=$Base->ice_checkedCast("::Demo::IceTest");   
  $Properties=$Manager->insert("limengyu",25);   
  echo $Properties;   
  }   
  catch( Exception $e ) {   
  print_r($e);   
  }   
?>   
测试后报错如下:php error:call to undefined function Ice_loadprofile  
经查,原因如下:The Ice extension for PHP underwent significant changes in 3.4 and is not backward-compatible with Ice 3.3. There's a section in the 3.4 release notes that explains these changes.

然后找到php.ini打开该文件,在最后添加extension = php_ice.dll

将X:/ice/bin/php_ice.dll拷到X:/php/ext下   这个对应的php_ice.dll版本与php的版本最好是符合推荐列表中的


然后把ice/bin中的这些文件依次拷到apache/bin下。有如下这么多文件

bzip2.dll
   ice33.dll
   iceutil33.dll
   msvcp60.dll
   msvcrt.dll
   slice33.dll
   stlport_vc646.dll

 

加载slice.

直接加载slice====〉修改php.ini文件

修改php/php.ini文件



基于ICE可以实现电信级的解决方案。前面我们提到过在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作,将基础对象操作和数据库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE的数据层可以在未来方便的进行扩展。ICE支持分布式的部署管理,消息中间件,以及网格计算等等。

大道理讲完,言归正传,最近育儿网新增了不少新服务,服务间经常会需要相互调用数据,例如用户中心要取博客系统里的文章啊,论坛里发文后要在积分系统里增加用户积分啊。由于设计时这些服务仅仅基于统一的用户中心,服务间基本是独立的,所以要实现这些调用只能在每个服务上新增为其它服务提供服务的服务-_-!。这个时候有几个可选方案,我们开始选择了xml-rpc,基于http和xml的选程调用,用了一段时间,发现维护成本和访问性能都存在问题。

由于这些中间服务部署的时候是和各自所属的服务部署在一起的,对这些服务做整体的改动就非常困难,要维护起来就比较麻烦。另外由于是什么http和xml作为通信协议,由php实现业务逻辑,性能问题也很明显,而且这些http请求都会在http日志留下足迹,导致我们的日志分析很不精确。这个问题不是太大,但很郁闷,所以我们考虑使用ICE来解决这个问题,至于SOAP什么的就不考虑了,同样效率低下。

实现的过程还是比较顺利,花了三天的时间用c++实现了大部分常用的接口,服务端采用deamon的方式运行,错误日志记在syslog里(/var/log/messages),客户端PHP,编译进去了IcePHP,调用的方法很简单。现在还存在一些问题,运行的时候会异常退出,还需要一段时间来解决,暂时加了只狗看着,一旦进程里没了就重新启动。

既然要跨平台通讯,就涉及对象描述,ICE使用Slice来对结构,类,方法等进行定义。完了以后服务器端,客户端都按这个来调用和实现。ICE内置的Linux 下后台Deamon实现方案非常简单,只需要从Ice::Service里派生出一个类来,实现run方法,在这个方法里创建adapter对象,并在adapter对象里添加Servants,然后激活这个adapter就可以了,网络层的通信都由ICE接管了。由于是基于tcp/ip的直接通信,比更高层的http通信效率要高很多。

在客户端实现时,我们也碰到了一些小麻烦。一个是内置的$ICE对象用的时候有时需要用global声明,否则可能会出错,另外由于默认情况下Slice中struct对应到php的类型是一个类的实例,而不是一个数组,所以在赋值给页面的时候,smarttemplate以及其它模板系统中可能都会存在问题,可以通过修改模板系统的数据赋值显示代码解决。

我们做了一些性能的测试,同样运行1千次请求,使用xml-rpc实现需要28秒左右,使用ICE实现,只需要3秒多,性能的差距还是很大的,同时在这个过程中没发现有内存泄露的情况,效果还比较理想。


最新版本L http://www.zeroc.com/download.html  当然也不是最新的最好,要和整套的PHP,CGI或环境甚至OS,匹配过。因此整个环境非常重要的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值