php中间件--ice

                              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/

猜你喜欢

转载自blog.csdn.net/Ghost_hell/article/details/81507591
今日推荐