http://zhidao.baidu.com/question/88682549.html
http://blog.chinaunix.net/u/29960/showart_262895.html 推荐
http://blog.chaoskey.com/2008/08/23/126/ 推荐
http://blog.youkuaiyun.com/stopname/archive/2007/07/05/1680068.aspx
http://bbs.yybug.com/read-htm-tid-16264.html
ICE支持分布式的部署管理,消息中间件,以及网格计算等等。
中间件工作模式基本上都是:用户Clinet逻辑功能快--->中间件Clinet模块 ----网络-----> 中间件Server模块 ----->用户Server逻辑功能块。由此可见中间件完成了最繁杂的部分,在使用中间件的时候,开发者只需要专注于业务功能逻辑的实现就可以了,大大缩短了开发时间。
最近育儿网新增了不少新服务,服务间经常会需要相互调用数据,例如用户中心要取博客系统里的文章啊,论坛里发文后要在积分系统里增加用户积分啊。由于设计时这些服务仅仅基于统一的用户中心,服务间基本是独立的,所以要实现这些调用只能在每个服务上新增为其它服务提供服务的服务-_-!。这个时候有几个可选方案,我们开始选择了xml-rpc,基于http和xml的选程调用,用了一段时间,发现维护成本和访问性能都存在问题。
由于这些中间服务部署的时候是和各自所属的服务部署在一起的,对这些服务做整体的改动就非常困难,要维护起来就比较麻烦。另外由于是什么http和xml 作为通信协议,由php实现业务逻辑,性能问题也很明显,而且这些http请求都会在http日志留下足迹,导致我们的日志分析很不精确。这个问题不是太大,但很郁闷,所以我们考虑使用ICE来解决这个问题,至于SOAP什么的就不考虑了,同样效率低下。
实现的过程还是比较顺利,花了三天的时间用c++实现了大部分常用的接口,服务端采用deamon的方式运行 ,错误日志记在syslog里(/var /log/messages),客户端PHP,编译进去了IcePHP,调用的方法很简单 。现在还存在一些问题,运行的时候会异常退出,还需要一段时间来解决,暂时加了只狗看着,一旦进程里没了就重新启动。
--------------------ICE与PHP
ICE(Internet Communications Engine 网络通讯引擎),是由Corba原核心成员开发的一个开源中间件,据称其各种性能完全优于Corba。除此之外,我们第一次见到了直接支持PHP的中间件。
ICE的安装,去http://www.zeroc.com/download.html 下载一个Ice针对PHP的安装包,按照说明安装上。
ICE的使用:使用Slice(ICE的一种简单语法脚本),编写一个xx.ice文件。可以使用slice2cpp或slice2java等生成一个cpp或java的ICE框架程序,然后在这个框架程序中进行代码编写。ICE在PHP的应用继承了PHP的一贯传统——简单,只需要在php.ini中加载该xx.ice,在PHP中就可以使用了。
ICE在PHP应用中的缺点,无法使用PHP编写Server端,其实这也是PHP的一个缺陷——没有完善的多进程和多线程管理机制。因此,Server端可以采用ICE所支持的其它语言进行编写,比如JAVA/C++/VB/PYTHON等。
--------------------------------------首先 安装第三方包: ThirdParty-Sources-3.3.0.tar.gz
http://www.zeroc.com/download/Ice/3.3/ThirdParty-Sources-3.3.0.tar.gz
解压 ThirdParty-Sources-3.3.0.tar.gz
1)mcpp is a C/C++ preprocessor
—-
解压 mcpp-2.7.tar.gz
$ cd mcpp-2.7
$ patch -p0 < ../mcpp/mcpp-2.7.patch
$ patch -p0 < ../mcpp/mcpp-2.7.patch2
./configure CFLAGS=-fPIC -enable-mcpplib -disable-shared
make
make install
2)Berkeley DB 是一个高性能的,嵌入数据库编程库,和C语言, C++, Java, Perl, Python, Tcl以及其他很多语言都有绑定。
—–
解压 db-4.6.21.NC.tar.gz
$ cd db-4.6.21.NC
$ cd build_unix
$ ../dist/configure -enable-cxx -enable-java
--------------error:
error: no acceptable Java compiler found in $PATH
所以换成../dist/configure
--------------
$ make
$ make install
3)bzip2 是 Julian Seward 开发并按照自由软件/开源软件协议发布的数据压缩算法及程序
——
解压 bzip2-1.0.5.tar.gz
$ cd bzip2-1.0.5
$ make -f Makefile-libbz2_so
$ make install
4) expat 是一个 XML parsing C library
——
解压 expat-2.0.1.tar.gz
$ cd expat-2.0.1
$ ./configure
$ make
$ make install
5) openssl 是 Secure Socket Layer (SSL) binary and related cryptographic tools
——–
解压 openssl-0.9.8g.tar.gz
$ cd openssl-0.9.8g
$ ./config
$ make
$ make install
//*****************************
--------------------------------------现在正式安装 Ice-3.3.0.tar.gz 附下载
http://www.zeroc.com/download/Ice/3.3/Ice-3.3.0.tar.gz
解压 Ice-3.3.0.tar.gz
???????????????????????????????????? 编译 cpp版本:
$ cd Ice-3.3.0/cpp
$ make
$ make install
特别注意: 如果编译不通过 ,请修改 cpp/config/Make.rules的相关报错第三方库的路径 ,重新编译。还要注意设置ICE的安装目录,比如: prefix = /opt/ICE
修改文件vim cpp/config/Make.rules如下
DB_HOME ?= /usr/local/BerkeleyDB.4.3
??????????????????????????????????????????? 安装 Ice
cd Ice-3.3.0
# cd config
安装ice3.0.1,有DB_HOME的一行改为
DB_HOME ?= <Berkley DB的安装目录>
修改文件vim config/Make.rules第76行如下(注意去掉前面的“#”注释):
DB_HOME ?= /usr/local/BerkeleyDB.4.3
配一下就开始make吧,有出错信息的话注意看一下lib或是include的地方
make install
*******************************//
--------------------------------------IcePHP-3.1.1.tar.gz 附下载
----------------?????????????方法一:重新编译PHP
tar xzvf IcePHP-3.1.1.tar.gz
cd IcePHP-3.1.1
cp –r src/ice /home/gaolimin/php-5.2.0/ext //php的解压位置
cd /home/gaolimin/php-5.2.0
rm-rf configure autom4te.cache //删除php的configure
./buildconf –force //创建支持ice的configure
下面编译php
./configure --prefix=/usr/local/php5.2.0 --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-gd --with-zlib --with-png --with-jpeg=/usr/local/lib --with-freetype-
dir=/usr/local/lib --enable-sockets --with-curl --enable-gd-imgstrttf --enable-gb-native-ttf --with-fft --with-sqlite --with-iconv --with-mbstring –with-ice=share,/opt/Ice-
3.1.1 //php支持ice动态共享
make
make install
cp modules/ice.so /usr/local/php5.2.0/include/php/include/
在/usr/local/php5.2.0/lib/php.ini中添加
extension_dir=/usr/local/php5.2.0/include/php/include
extension=ice.so
----------------方法二:把icePHP装成php的ext模块
目前ice3.0.1支持php只到5.1.2,这里的配置是把icePHP装成php的ext模块,装的是php 的cgi模式
[安装IcePHP3.0.1]
1 cd /root/software/php-5.1.2
2 cp /root/ice/IcePHP-3.0.1/src/ice/ ext/ -R
3 cp /root/ice/IcePHP-3.0.1/configure-5.1.2.gz configure.gz
4 gunzip configure.gz
5 ./configure --with-mysql=/usr/local/mysql --with-openssl --enable-discard-path --enable-pcntl --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-expat-dir=/usr --
enable-ftp --with-iconv --with-ice=/usr/local/Ice-3.0.1/
6 make;make install
这时在IcePHP-3.0.1目录下有很多test 可惜我没试出,python的东西看不懂,但实际上应该已经通了。
在/usr/local/lib/php.ini 里的[php]下配好ice.options 和ice.slice,这两个选项需要手工加的,ice的中文手册上没有讲的很清,总的来说实际环境时还是可能会有很多乱七八糟的问题。不过配通
以后用c ++和php通过ice通信还是蛮好玩的。
rpm -q nginx 查看是否已经安装
查询软件的安装路径:rpm -ql ice-php
rpm -qa|grep ice-php 查看已安装的RMP包
执行php -m 命令查看IcePHP模块有没有被php加载
在PHP的安装目录下建立如下文件和目录
/opt/php/etc/ice.slices/ 这个目录下存放.ice文件
/opt/php/etc/ice.profiles 这个文件是.ice文件的配置文件
-------------------------------------- 一个测试的例子
在安装Ice的时候有一个hello demo把它编译好了执行server文件
把Hello.ice拷贝到/opt/php/etc/ice.slices/下
在/opt/php/etc/ice.profiles中添加内容:
[Profile1]
ice.slice=/opt/php/etc/ice.slices/Hello.ice
执行IcePHP中的hello demo