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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP中间件--ICE

發(fā)布時間:2024/9/20 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP中间件--ICE 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

?

1第一個問題:為什么要使用中間件?

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

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

因此ICE就是現(xiàn)在非常流行的網(wǎng)站開發(fā)中間件之一。

?

關(guān)于更多理解為何使用中間件的原因這里有兩個鏈接:

http://blog.csdn.net/phphot/archive/2009/04/18/4089806.aspx

http://hi.baidu.com/xdh2571/blog/item/8f01fafc4debfc89b801a04b.html

?

2 對于ICE,它是怎么樣通信結(jié)構(gòu)?

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

?

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

?

3 安裝ICE

安裝環(huán)境: 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 ?

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)

確認(rèn)機子是否安裝g++,如果沒有,則安裝:

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

?

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

?

基本環(huán)境:由于是實驗?zāi)康?#xff0c;我僅僅將Client和Server同當(dāng)做一臺CentOS機子

?

A 建文件夾: mkdir ice_demo

?

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

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

?

C #slice2cpp Printer.ice //產(chǎn)生出了Printer.h和Printer.cpp兩個文件

D 創(chuàng)建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?? //在同文件夾下會出現(xiàn):server執(zhí)行文件

?

F #slice2php Printer.ice

G 創(chuàng)建Client.php

<?php
require 'Ice.php';
require 'Printer.php';

ic?=?null;
?????try

?????{

ic = Ice_initialize();
?ic->stringToProxy("SimplePrinter:default -p 10000");
???

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

?

發(fā)現(xiàn)每運行一次Client.php,第一個終端就打出一個Hello World. ICE 運行成功.

?

?

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

?

?

作者:軒脈刃(yjf512)
出處:(http://www.cnblogs.com/yjf512/)
版權(quán)聲明:本文的版權(quán)歸作者與博客園共有。歡迎轉(zhuǎn)載閱讀,轉(zhuǎn)載時須注明本文的詳細(xì)鏈接。?

?

[參考文章]

http://blog.csdn.net/phphot/archive/2009/04/18/4089806.aspx

http://hi.baidu.com/xdh2571/blog/item/8f01fafc4debfc89b801a04b.html

http://www.zeroc.com/

(特別是里面的Document)

http://blog.csdn.net/cnhome/archive/2008/11/18/3331279.aspx


來源:https://www.cnblogs.com/yjf512/archive/2011/06/07/2074554.html

總結(jié)

以上是生活随笔為你收集整理的PHP中间件--ICE的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。