日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)

發布時間:2024/9/20 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中間件。使用ICE能使得php(或c++,java,python)與java,c++,.net,python等進行交互。基于ICE可以實現電信級的解決方案。

?

1。為什么要使用中間件?

設想一個這樣的場景:對于一個大型網站來說,往往有很多個web服務器,每個web服務器都存在很多對于數據庫的操作。如果直接在php程序上直接操作數據庫,那么勢必要在每臺web服務器都配置數據庫的用戶名,密碼等信息,這是極度不安全的。并且如果我們要統一對數據庫的操作進行管理和修改等,那么久要去每個web服務器上修改。因此,這時候中間件就產生了。它是基于SOA(面向服務架構)的思想,將對數據庫的操作統一成一個服務,放置于一臺服務機上,每個web服務器要對數據庫進行操作,就可以直接訪問這個提供中間件服務的服務器。

還有一點,考慮到性能問題,這里的提供服務的機子我們不使用html和xml傳輸數據,一般使用TCP,UDP這層的通信。

因此ICE就是現在非常流行的網站開發中間件之一。

2 ICE通信結構

ICE有分為提供服務的一方Server和尋求服務的一方Client,兩臺機子上都需要安裝ICE組件,他們的通信結構如下:

?

Client端應該事先知道Server端能提供的服務是什么,有什么格式?這就是圖中的Proxy Code,在Proxy Code中定義好了類和接口。Server端中接口定義的就是Skeleton,具體實現接口的是Server Application,Server Application可以是C++,java,C#等寫的,但是ICE不提供PHP寫Server端。

?

3 安裝ICE

安裝環境: CentOS

1) cd /etc/yum.repos.d/ wget http://www.zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo

2)

編輯zeroc-ice.repo:

[zeroc-ice]

name=Ice 3.4 for Red Hat Enterprise Linux $releasever - $basearch

baseurl=http://www.zeroc.com/download/Ice/3.4/rhel5/$basearch

enabled=1

gpgcheck=1

gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release

3)

使用yum安裝

yum install ice* db46* mcpp-devel

4)

確認機子是否安裝g++,如果沒有,則安裝:

yum install gcc-c++ libstdc++-devel

?

?

linux環境下安裝PHP中間件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版本

icegridnode --version icegridadmin --version

php中通過直接編譯的方式去安裝ICE

上面我們講過了在linux環境下通過rpm的方式來安裝ICE,這種安裝方式可以是比較簡單的,自己在安裝過程中發現后面PHP無法裝在IcePHP.sp模塊,也有可能自己在安裝過程中某個地方出錯了。又嘗試通過直接編譯的方式去安裝ICE,PHP也正常裝在了IcePHP.so模塊,大功告成,這里記錄一下方法。

以安裝ICE-3.4.2版本為例,為了方便管理,將ICE相關的軟件都安裝到/usr/local/ICE-3.4.2/目錄下。

一、安裝第三方包:ThirdParty-Sources-3.4.2

1、解壓安裝包

?

# tar zxvf ThirdParty-Sources-3.4.2.tar.gz # cd ThirdParty-Sources-3.4.2

2、安裝mcpp

?

# tar zxvf mcpp-2.7.2.tar.gz # cd mcpp-2.7.2 # ./configure --prefix=/usr/local/ICE-3.4.2/mcpp-2.7.2/ CFLAGS=-fPIC -enable-mcpplib -disable-shared # make # make install

3、安裝Berkeley DB

Berkeley DB 是一個高性能的,嵌入數據庫編程庫,和C語言, C++, Java, Perl, Python, Tcl以及其他很多語言都有綁定。

?

# cd .. # tar zxvf db-4.8.30.NC.tar.gz # cd db-4.8.30.NC/build_unix/ # ../dist/configure --prefix=/usr/local/ICE-3.4.2/BerkeleyDB.4.6/ -enable-cxx # make # make install

4、安裝bzip2

bzip2 是 Julian Seward 開發并按照自由軟件/開源軟件協議發布的數據壓縮算法及程序。

# cd../../ # tar zxvf bzip2-1.0.6.tar.gz # cd bzip2-1.0.6

修改Makefile,將PREFIX指向/usr/local/ICE-3.4.2/bzip2-1.0.6

# make # make install

5、安裝expat

expat 是一個 XML parsing C library。

# cd .. # tar zxvf expat-2.0.1.tar.gz # cd expat-2.0.1 # ./configure --prefix=/usr/local/ICE-3.4.2/expat-2.0.1/ # make # make install

6、安裝openssl

openssl 是 Secure Socket Layer (SSL) binary and related cryptographic tools。

# cd .. # tar zxvf openssl-0.9.8r.tar.gz # cd openssl-0.9.8r # ./config --prefix=/usr/local/ICE-3.4.2/openssl # make # make install

二、安裝ICE-3.4.2

# tar zxvf Ice-3.4.2.tar.gz # cd Ice-3.4.2/cpp # vi config/Make.rules

修改安裝包路徑:

prefix ?= /usr/local/ICE-3.4.2/Ice-$(VERSION)embedded_runpath_prefix ?= /usr/local/ICE-3.4.2/Ice-$(VERSION_MAJOR).$(VERSION_MINOR)BZIP2_HOME ?= /usr/local/ICE-3.4.2/bzip2-1.0.6DB_HOME ?= /usr/local/ICE-3.4.2/BerkeleyDB.4.6EXPAT_HOME ?= /usr/local/ICE-3.4.2/expat-2.0.1OPENSSL_HOME ?= /usr/local/ICE-3.4.2/opensslMCPP_HOME ?= /usr/local/ICE-3.4.2/mcpp-2.7.2 # make

編譯過程報錯:

../../lib/libIce.so: undefined reference to `libiconv' ../../lib/libIce.so: undefined reference to `libiconv_close' ../../lib/libIce.so: undefined reference to `libiconv_open' collect2: ld 返回 1 make[2]: *** [../../bin/transformdb] 錯誤 1 make[2]: Leaving directory `/data/software/Ice-3.4.2/cpp/src/FreezeScript'make[1]: *** [all] 錯誤 1 make[1]: Leaving directory `/data/software/Ice-3.4.2/cpp/src' make: *** [all] 錯誤 1 # make install

安裝過程報錯:

../../lib/libIce.so: undefined reference to `libiconv' ../../lib/libIce.so: undefined reference to `libiconv_close' ../../lib/libIce.so: undefined reference to `libiconv_open' collect2: ld 返回 1 make[2]: *** [../../bin/transformdb] 錯誤 1 make[2]: Leaving directory `/data/software/Ice-3.4.2/cpp/src/FreezeScript' make[1]: *** [install] 錯誤 1 make[1]: Leaving directory `/data/software/Ice-3.4.2/cpp/src' make: *** [install] 錯誤 1

修改

?

vim config/Make.rules.Linux

找到143行這里

?

?

BASELIBS = -lIceUtil -lpthread -lrt -liconv


?

在最后面增加-liconv, 執行make和make instll命令等待編譯完成.


至此,安裝ICE完畢。

?

3、編譯PHP版本

# cd .. # cd php/ # vim config/Make.rules.php

指定安裝包路徑:

prefix ?= /usr/local/ICE-3.4.2/Ice-$(VERSION)embedded_runpath_prefix ?= /usr/local/ICE-3.4.2/Ice-$(VERSION_MAJOR).$(VERSION_MINOR)#指定PHP安裝路徑 PHP_HOME ?= /usr/local/php

安裝編譯

# make # make install

4、設置ICE環境變量

# vi /etc/profile

?

export PHPPATH=/usr/local/ICE-3.4.2/Ice-3.4.2/php/: export ICE_HOME=/usr/local/ICE-3.4.2/Ice-3.4.2 export PATH=$PATH:$ICE_HOME/bin export LD_LIBRARY_PATH=$ICE_HOME/lib export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC ICE_HOME

使之生效

?

?

source /etc/profile

測試是否成功:

?

?

icegridnode --version icegridadmin --version

Linux環境下make編譯安裝ICE-3.3.0

Linux環境下make編譯安裝ICE-3.3.0

環境:

Linux+lnmp

PHP5.2.17

1、下載安裝包:

?

#wget http://www.zeroc.com/download/Ice/3.3/Ice-3.3.1.zip#wget http://www.zeroc.com/download/Ice/3.3/ThirdParty-Sources-3.3.1.tar.gz

這里提醒一下,安裝PHP ICE需要注意PHP版本和ICE版本,PHP 5.2只能用 ICE-3.3.X版本。

?

2、安裝步驟

1)、解壓安裝包

?

#tar zxvf ThirdParty-Sources-3.3.1.tar.gz

2)、安裝mcpp

?

?

#tar zxvf mcpp-2.7.2.tar.gz#cd mcpp-2.7.2#./configure --prefix=/usr/local/ICE-3.3.0/mcpp-2.7.2/ CFLAGS=-fPIC -enable-mcpplib -disable-shared#make#make install

3)、安裝Berkeley DB

?

# tar zxvf db-4.6.21.NC.tar.gz# cd db-4.6.21.NC# cd build_unix/# ../dist/configure --prefix=/usr/local/ICE-3.3.0/BerkeleyDB.4.6/ -enable-cxx# make# make install

4)、安裝bzip2

?

?

# tar zxvf bzip2-1.0.5.tar.gz# cd bzip2-1.0.5

修改Makefile文件:

?

?

# vim Makefile #修改PREFIX指向 # Where you want it installed when you do 'make install' # PREFIX=/usr/local PREFIX=/usr/local/ICE-3.3.0/bzip2-1.0.5 # make# make install

5)、安裝expat

?

?

# tar zxvf expat-2.0.1.tar.gz# cd expat-2.0.1# ./configure --prefix=/usr/local/ICE-3.3.0/expat-2.0.1/# make# make install

6)、安裝openssl

?

?

# tar zxvf openssl-0.9.8g.tar.gz# cd openssl-0.9.8g# ./config --prefix=/usr/local/ICE-3.3.0/openssl# make# make install

7)、安裝ICE-3.3.1

?

?

# tar zxvf Ice-3.3.1.zip# cd Ice-3.3.1/cpp/# vim config/Make.rules

修改:

?

?

# # Select an installation base directory. The directory will be created # if it does not exist. # prefix ?= /usr/local/ICE-3.3.0/Ice-$(VERSION)# # The "root directory" for runpath embedded in executables. Can be unset # to avoid adding a runpath to Ice executables. # embedded_runpath_prefix ?= /usr/local/ICE-3.3.0/Ice-$(VERSION_MAJOR).$(VERSION_MINOR)# If libbzip2 is not installed in a standard location where the # compiler can find it, set BZIP2_HOME to the bzip2 installation # directory. # BZIP2_HOME ?= /usr/local/ICE-3.3.0/bzip2-1.0.5# If Berkeley DB is not installed in a standard location where the # compiler can find it, set DB_HOME to the Berkeley DB installation # directory. # DB_HOME ?= /usr/local/ICE-3.3.0/BerkeleyDB.4.6# If expat is not installed in a standard location where the compiler # can find it, set EXPAT_HOME to the expat installation directory. # EXPAT_HOME ?= /usr/local/ICE-3.3.0/expat-2.0.1# # If OpenSSL is not installed in a standard location where the # compiler can find it, set OPENSSL_HOME to the OpenSSL installation # directory. # OPENSSL_HOME ?= /usr/local/ICE-3.3.0/openssl# # If Mcpp is not installed in a standard location where the compiler # can find it, set MCPP_HOME to the Mcpp installation directory. # MCPP_HOME ?= /usr/local/ICE-3.3.0/mcpp-2.7.2

修改:(如果直接make可以成功,則忽略該修改)

?

?

# vim config/Make.rules.Linux#修改BASELIBS值,在末尾添加-liconv BASELIBS = -lIceUtil -L$(NPTL_LIB) -lpthread -lrt -liconv

編譯安裝:

?

?

# make# make install

8)、編譯安裝 PHP 版本

?

?

# cd ../php# vim config/Make.rules

參照ICE修改相應配置,并修改PHP_HOME路徑:

?

?

# Select an installation base directory. The directory will be created # if it does not exist. #prefix ?= /usr/local/ICE-3.3.0/Ice-$(VERSION)# # The "root directory" for runpath embedded in executables. Can be unset # to avoid adding a runpath to Ice executables. # embedded_runpath_prefix ?= /usr/local/ICE-3.3.0/Ice-$(VERSION_MAJOR).$(VERSION_MINOR)# If you've installed a distribution, or PHP was included with # your system, then you likely need to review the values of # PHP_INCLUDE_DIR and PHP_LIB_DIR. #PHP_HOME ?= /usr/local/php

編譯安裝:

?

?

# make# make install

復制 IcePHP.so到PHP extension_dir目錄:

?

?

# cp -p /usr/local/ICE-3.3.0/Ice-3.3.1/lib/IcePHP.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

修改PHP配置文件php.ini,添加IcePHP.so

?

?

; Directory in which the loadable extensions (modules) reside. extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" extension = "memcache.so" extension = "pdo_mysql.so" extension = "IcePHP.so"


9)、重啟服務,查看php -m或phpinfo

?

?

# /usr/local/php/bin/php -mfilter ftp gd gettext hash ice iconv json libxml


?

?

ICE提供 YUM 安裝,這種安裝方式最簡單,但是安裝成功后,ICE默認把PHP擴展安裝到了系統默認自帶的PHP中,一般情況下我們都不會自己使用linux系統自動的PHP版本,而是自己重新安裝的,ICE通過YUM安裝的方式無法對PHP進行安裝擴展,這個問題有待解決。

?

?

4 寫一個ICE例子,目的:Client端每調用一次服務,Server端就打出一個"hello world”;

?

基本環境:由于是實驗目的,我僅僅將Client和Server同當做一臺CentOS機子

?

A 建文件夾: mkdir ice_demo

?

B 創建文件Printer.ice,這個.ice文件是ICE的slice文件,在其中定義了服務的對象和接口

module Demo {
interface Printer {
void printString(string s);
};
};

?

C #slice2cpp Printer.ice //產生出了Printer.h和Printer.cpp兩個文件

D 創建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;
}

E

#c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp

# c++ -o server Printer.o Server.o \ -L$ICE_HOME/lib -lIce –lIceUtil //在同文件夾下會出現:server執行文件

?

F #slice2php Printer.ice

G 創建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;
}
}
?>

H

打開一個終端運行 #./server

打開另一個終端運行 php Client.php

?

發現每運行一次Client.php,第一個終端就打出一個Hello World. ICE 運行成功.

?

?

附注:大型的網站對于ICE的使用是很多的。比如需要實現一個分詞搜索的功能使用lucence,對數據庫的訪問,對memcached的訪問都可以直接在ICE中寫一個服務來提供統一管理和使用。

再貼個PHP使用ICE的簡單代碼示例:

?

<?php header('Content-Type:text/html;charset=utf-8'); require('Ice.php'); require('PPUserService.php');try{$initData = new Ice_InitializationData;$initData->properties = Ice_createProperties();$initData->properties->load('/home/wwwroot/ice.test.com/props.cfg');$communicator = Ice_initialize($initData);$proxy = $communicator->stringToProxy('PP/PPUserService');$printer = com_cb_ppuserservice_serviceice_PPUserServiceIcePrxHelper::checkedCast($proxy);if(!$printer){throw new RuntimeException("Invalid proxy"); }$result = $printer->isProfileCompleted(8723504);var_dump($result); } catch(Exception $ex) { echo $ex; }

?

上面就是自己在調試ICE時使用的PHP代碼,不過在調用接口過程中會出現一些問題:

如果接口返回bool類型值,接口調用正常;

如果接口返回對象類型值,接口報錯,報"UnmarshalOutOfBoundsException"異常,正在查找這個問題是什么原因造成的。

過幾天再對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!

?

在php中使用ice教程

前面我們已經在linux環境下成功安裝了支持PHP的ICE環境,接下來就是怎么在PHP使用ICE了。

1、修改PHP配置文件php.ini,載入ICE擴展

vim /usr/local/php/etc/php.ini

添加:

extension = "IcePHP.so"

重啟服務

/etc/init.d/php-fpm reload

查看ICE是否載入成功:

1)通過命令查看已安裝PHP擴展

[root@localhost ~]# php -m

顯示:

gettext gmp hash ice iconv libxml

可以看到有ICE的身影了,說明已經成功了。

另外也可以通過phpinfo的方式查看:

接下來就是在應用中載入Ice了,這里我們可以查看官方是怎么介紹的:

Your application will also need to include at least some of the Ice for PHP run-time source files (installed in /usr/share/php on RHEL, Amazon Linux, and Ubuntu, and in /usr/share/php5 on SLES). This installation directory is included in PHP's default include path, which you can verify by executing the following command:

% php -i | grep include_path

If the installation directory is listed, no further action is necessary to make the run-time source files available to your application. Otherwise, you can modify the include_path setting in php.ini to add the installation directory:

include_path = /usr/share/php:...

Another option is to modify the include path from within your script prior to including any Ice run-time file:

PHP ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . '/usr/share/php'); require 'Ice.php'; // Load the core Ice run time definitions.

?

ICE常見編譯和運行(異常)錯誤

在編譯和 Ice 應用相關的文件中,經常因為 ice 相關的文件包含關系而導致編譯無法通過,此時的錯誤一般提示和 handle.h 相關。然而想要解決這樣的錯誤,一般只需要把在無法編譯成 .o 文件的 .cpp 文件中和 ice 文件相關的頭文件放在該 .cpp 文件的起始行即可。也就是說,根據提示,把 .cpp 文件中最早提示導致出錯的 .h 文件放在起始行。

ICE 的常見運行錯誤 ( 異常 ):

1 使用的地址錯誤 ,IP 并非本地 IP: 發生在初始化服務器時 , 沒辦法初始化 adapter.

錯誤信息 : (IP 錯誤 )

?

./test: Network.cpp:475: Ice::SocketException:socket exception: Cannot assign requested address


另外 : 已經啟動服務器后又重新啟動 : 發生在初始化服務器時 , 沒辦法初始化 adapter.

錯誤信息 : (port 已經被使用 )

?

./server: Network.cpp:475: Ice::SocketException:socket exception: Address already in use


///stringtoProxy 對于任何 string 都是有效的 , 均可以生成相應代理 , 但是該代理是否有效是無法保證的 . 如果代理無效 , 也就是說根本就沒有這樣的 adapter 或者對象 , 那么使用 Checkcast 或直接用該代理調用相應對象接口均會拋異常 . 下面對每種情況加于分析 .

2 使用的代理 IP 錯誤 : 發生在使用代理調用接口的時候

原因 : 根本就沒有相應的通訊器存在 .

錯誤信息 : ( 使用的代理 IP 錯誤 )

拋出異常 : Ice::ConnectFailedException ( 需要幾秒 , 需要進行搜索 )

3 使用的代理端口錯誤 , 兩邊不一致 : 發生在使用代理調用接口的時候

原因 : 存在通訊器 , 但是不存在相應的對象適配器 .

錯誤信息 :

拋出異常 : Ice::ConnectionRefusedException ( 很快 , 端口沒有被啟用引起的 , 無人監聽該端口 )

4 使用的對象名字不正確 : 發生在使用代理調用接口的時候

原因 : 能夠找到相應的對象適配器 , 但是該對象適配器中無法找到相應的對象

錯誤信息 :

拋出異常 : Ice::ObjectNotExistException ( 很快 )

5 對方程序沒用啟用 , 也就是服務器沒有啟用 : 發生在使用代理調用接口的時候

原因 : 根本就沒有相應的通訊器存在 .

錯誤信息 :

拋出異常 : Ice::ConnectionRefusedException ( 很快 )

6 連接突然斷開 ( 比如對方因為段錯誤而程序停止 , 或者在連接過程中正常關閉 ) : 發生在使用代理調用接口的時候 ( 連接丟失 )

原因 : 已經建立連接的對方突然斷開

錯誤信息 :

?

warning: connection exception:TcpTransceiver.cpp:217: Ice::ConnectionLostException:connection lost: recv() returned zerolocal address = 10.0.0.4:10050remote address = 10.0.0.200:33412


( 服務器端的錯誤 , 使用 createObjectAdapter() 創建對象適配器 )

7 服務器端沒有指定 adapter 的端口和 ip, 僅僅隨便給了一個名字 , 并使用該名字從配置文件中讀取信息 : 啟動服務器時沒有問題正常 , 但是客戶端無法連接

原因 : 對象適配器無效來源 幫客之家www。bkjia.com

錯誤信息 :

拋出異常 : Ice::ConnectionRefusedException ( 很快 )

8 啟動服務器時 , 給定的 adapter 的名字和配置文件中使用的不一致 : 啟動服務器時沒有問題正常 , 但是客戶端無法連接 ( 無法從配置文件中獲取所需要的信息 port 和 ip)

原因 : 對象適配器無效

錯誤信息 :

拋出異常 : Ice::ConnectionRefusedException ( 很快 )

9 配置文件中的名字和程序中給定的 adapter 名字一致 , 也就是說缺少 Endpoints, 作為后綴 . 啟動服務器時沒有問題正常 , 但是客戶端無法連接 ( 無法從配置文件中獲取所需要的信息 port 和 ip)

原因 : 對象適配器無效

錯誤信息 :

拋出異常 : Ice::ConnectionRefusedException ( 很快 )

10 配置文件中的名字后綴 Endpoints 寫錯 , 比如 Endpoint. 啟動服務器時沒有問題正常 , 但是客戶端無法連接 ( 無法從配置文件中獲取所需要的信息 port 和 ip)

原因 : 對象適配器無效

錯誤信息 :

拋出異常 : Ice::ConnectionRefusedException ( 很快 )

11 程序中給定的 adapter 名字多了后綴 Endpoints( 或者其他字符 , 甚至是 ”.”). 啟動服務器時沒有問題正常 , 但是客戶端無法連接 ( 無法從配置文件中獲取所需要的信息 port 和 ip)

原因 : 對象適配器無效

錯誤信息 :

拋出異常 : Ice::ConnectionRefusedException ( 很快 )

( 說明 : 也就是說配置文件中必須有 Endpoints 作為后綴 , 而在程序中給定 adapter 的名字是一定不能帶該后綴 , 不然服務器無法正常工作 )
?


來源:http://www.bkjia.com/headlines/494214.html

總結

以上是生活随笔為你收集整理的PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕狠狠 | 美女色呦呦 | 美女被男人桶出白浆喷水 | 久久青青视频 | 都市激情亚洲一区 | 久久一区国产 | 国产91一区在线精品 | 在线h网站| 成人免费看毛片 | 男人的天堂亚洲 | 五月天婷婷爱 | 善良的女朋友在线观看 | 国产精品美女久久久久久久久 | 日视频| 在线精品观看 | 日韩电影一区二区 | 人与嘼交av免费 | 欧美无人区码suv | 久久精品激情 | 少妇真实被内射视频三四区 | 欧美黄色三级视频 | 国产911在线观看 | 亚洲日本精品视频 | 日本美女一区 | 超碰凹凸| 天天综合天天综合 | 亚洲欧美日韩在线一区 | 黄色天天影视 | 成都电影免费大全 | 欧美三级手机在线观看 | 国产亚洲色婷婷久久99精品91 | 91精品一区二区三区在线观看 | 91精品国产乱码久久 | 五月婷婷网站 | 国产精品99re | 国产一区二区三区成人 | 丁香激情五月少妇 | 性做爰裸体按摩视频 | 最新黄色av网址 | 欧美一二三 | 九色视频偷拍少妇的秘密 | 久久这里只有 | 亚洲 欧美 日韩 国产综合 在线 | 婷综合 | 美女福利在线观看 | 色婷婷综合网 | 波多野结衣家庭主妇 | 亚洲 精品 综合 精品 自拍 | 日本视频在线免费观看 | jiz亚洲| 美女网站免费视频 | 亚洲九九爱 | 91久久国产视频 | 国产激情二区 | 精品视频一区二区三区在线观看 | 亚洲视频一区二区 | 日本美女一区二区三区 | 免费久久久| 亚洲天堂首页 | 六月丁香婷婷激情 | 女人被狂躁60分钟视频 | 日日摸日日碰夜夜爽无码 | 国产欧美日| 亚洲欧美精品午睡沙发 | 亚洲第一视频在线 | ts人妖在线观看 | 男人都懂的网站 | 亚洲av无码专区在线播放中文 | 丝袜 中出 制服 人妻 美腿 | 白浆在线播放 | 精品国产伦一区 | 99精品偷自拍 | 亚洲日本成人 | 亚洲美女啪啪 | 三级一区二区 | 亚洲av中文无码乱人伦在线视色 | 九色综合网 | 高hnp视频| 日本护士取精xxxxxhd | 特大黑人巨交吊性xx | a毛片在线免费观看 | 欧洲精品无码一区二区 | 国产一区二区片 | 99riav3国产精品视频 | 亚洲一区在线视频观看 | 五个女闺蜜把我玩到尿失禁 | 无码人妻精品一区二区 | 呦呦在线视频 | 午夜视频h | 人人草人人看 | 波多野结衣在线视频播放 | 亚洲精品久久久久久久久 | 国产精品毛片一区二区在线看 | 噼里啪啦国语电影 | 一区二区三区在线播放视频 | 人妖粗暴刺激videos呻吟 | 精品久久久久久一区二区里番 | 久久国产精品99久久人人澡 | 国产一区二区三区在线观看视频 |