php中间件--ice
我试过很多次,以防万一,ice最好是编译安装,
安装
ICE的安装方式有多种,这里以通过RPM的方式进行安装为例:
1、下载ICE安装包:
wget http://www.zeroc.com/download/Ice/3.4/Ice-3.4.1-rhel5-i386-rpm.tar.gz
ICE各版本对系统有要求,下载之前需要确认一下自己服务器的环境是否支持,我们这里下载的是3.4.1版本。
2、解压
tar -zxvf Ice-3.4.1-rhel5-i386-rpm.tar.gz
解压后我们可以看到所有的rpm安装包:
-rw-r--r-- 1 503 users 1312303 2010-06-04 db48-4.8.30-1ice.rhel5.i386.rpm
-rw-r--r-- 1 503 users 51901 2010-06-04 db48-devel-4.8.30-1ice.rhel5.i386.rpm
-rw-r--r-- 1 503 users 1157525 2010-06-04 db48-java-4.8.30-1ice.rhel5.i386.rpm
-rw-r--r-- 1 503 users 111963 2010-06-04 db48-utils-4.8.30-1ice.rhel5.i386.rpm
-rw-r--r-- 1 503 users 112755 2010-06-04 ice-3.4.1-1.rhel5.noarch.rpm
-rw-r--r-- 1 root root 18987481 2011-04-24 Ice-3.4.1-rhel5-i386-rpm.tar.gz
-rw-r--r-- 1 503 users 540689 2010-06-04 ice-c++-devel-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 2817314 2010-06-04 ice-java-3.4.1-1.rhel5.noarch.rpm
-rw-r--r-- 1 503 users 287932 2010-06-04 ice-java-devel-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 3252074 2010-06-04 ice-libs-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 195082 2010-06-04 ice-php-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 66550 2010-06-04 ice-php-devel-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 1036142 2010-06-04 ice-python-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 31417 2010-06-04 ice-python-devel-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 223937 2010-06-04 ice-ruby-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 25127 2010-06-04 ice-ruby-devel-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 3241350 2010-06-04 ice-servers-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 170534 2010-06-04 ice-sqldb-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 4500205 2010-06-04 ice-utils-3.4.1-1.rhel5.i386.rpm
-rw-r--r-- 1 503 users 90809 2010-06-04 mcpp-devel-2.7.2-2ice.rhel5.i386.rpm
3、安装
rpm -ivh ice-3.4.1-1.rhel5.noarch.rpm
rpm -ivh db48-*.rpm
rpm -ivh mcpp-devel-2.7.2-2ice.rhel5.i386.rpm
rpm -ivh ice-libs-3.4.1-1.rhel5.i386.rpm
rpm -ivh ice-c++-devel-3.4.1-1.rhel5.i386.rpm
rpm -ivh ice-java-*.rpm
rpm -ivh ice-php-*.rpm
rpm -ivh ice-utils-3.4.1-1.rhel5.i386.rpm
rpm -ivh ice-servers-3.4.1-1.rhel5.i386.rpm
rpm -ivh ice-sqldb-3.4.1-1.rhel5.i386.rpm
这里我们可以根据自己的编程语言选择相应的安装包,上面我们安装了:c++、java、php
我们是通过rpm -ivh的方式进行安装,安装过程中注意包之间的依赖关系,按顺序安装。默认会安装到/usr/ 目录下,执行文件在/usr/bin目录下 include lib分别在/usr/include 和 /usr/lib 这里不用我多说…… 执行下 slice2cpp 提示no input file 就证明ICE环境已经可以啦。
ice测试
1、建立ice文件Printer.ice
module Demo{
interface Printer{
void printString(string s);
};
};
2、执行 slice2cpp Printer.ice 执行成功后可以看到当前目录下生成了 Printer.cpp 和 Printer.h 两个文件
3、新建Server.cpp
#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;
using namespace Demo;
class PrinterI : public Printer {
public:
virtual void printString(const string& s,
const Ice::Current&);
};
void
PrinterI::
printString(const string& s, const Ice::Current&)
{
cout << s << endl;
}
int
main(int argc, char* argv[])
{
int status = 0;
Ice::CommunicatorPtr ic;
try {
ic = Ice::initialize(argc, argv);
Ice::ObjectAdapterPtr adapter
= ic->createObjectAdapterWithEndpoints(
"SimplePrinterAdapter", "default -p 10000");
Ice::ObjectPtr object = new PrinterI;
adapter->add(object,
ic->stringToIdentity("SimplePrinter"));
adapter->activate();
ic->waitForShutdown();
} catch (const Ice::Exception& e) {
cerr << e << endl;
status = 1;
} catch (const char* msg) {
cerr << msg << endl;
status = 1;
}
if (ic) {
try {
ic->destroy();
} catch (const Ice::Exception& e) {
cerr << e << endl;
status = 1;
}
}
return status;
}
4、编译Server.cpp,执行:
g++ -I. -I/usr/include -o server Printer.cpp Server.cpp -L/usr/lib -lIce -lIceUtil
成功后会在同一目录中生成server可执行文件。
5、创建PHP客户端,执行命令:
slice2php Printer.ice
成功后,会在同一目录中生成Printer.php文件
6、创建Client.php
<?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;
}
}
?>
7、打开一终端执行:./server
8、打开另一终端执行:php Client.php
执行成功后,我们发现每执行一次php Client.php都会在服务终端输出 Hello World!
配置
1、修改PHP配置文件php.ini,载入ICE扩展
vim /usr/local/php/etc/php.ini
添加:
extension = "IcePHP.so"
重启服务
/etc/init.d/php-fpm reload
2、查看ICE是否载入成功:
1)通过命令查看已安装PHP扩展
[root@localhost ~]# php -m
显示:
gettext gmp hash ice iconv libxml 还有一点如果报出找不到Ice的问题。 那你就将编译好的记住是编译出来的Ice文件复制到php下。 例如这是我个人编译的Ice。 (路径:/opt/Ice-3.6.3/php/Ice)复制到 (/usr/share/php/) cp /opt/Ice-3.6.3/php/Ice /usr/share/php/