はじめに: これは、PHP に関連する知識、スキル、経験、および一部の PHP ソース コードを紹介する PHP ミドルウェア-ICE の詳細ページです。
class='pingjiaF' Frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=337545'scroll='no'>ICE (インターネット通信エンジン) は Zeroc によって提供されます高性能なミドルウェアです。 ICE を使用すると、php (または C++、Java、Python) が Java、C++、.net、Python などと対話できるようになります。キャリアグレードのソリューションはICEに基づいて実装できます。
1 最初の質問: なぜミドルウェアを使用するのですか?
次のようなシナリオを想像してください。大規模な Web サイトの場合、多くの場合、多くの Web サーバーがあり、各 Web サーバーはデータベースに対して多くの操作を実行します。 PHPプログラム上でデータベースを直接操作する場合、Webサーバーごとにデータベースのユーザー名やパスワードなどを設定する必要があり、非常に危険です。また、データベースの操作を一元的に管理・変更したい場合、各Webサーバー上で変更を行うと非常に時間がかかります。そこでこの時にミドルウェアが誕生しました。これは、データベースの操作をサービスに統合し、それをサーバー マシン上に配置する SOA (サービス指向アーキテクチャ) の考えに基づいており、各 Web サーバーは必要に応じてミドルウェア サービスを提供するサーバーに直接アクセスできます。データベースを操作します。
もう 1 つ、パフォーマンスの問題を考慮して、ここではサービス マシンでのデータ送信に HTML と XML を使用せず、通常は TCP と UDP 層の通信を使用します。
つまり、ICE は現在非常に人気のある Web サイト開発ミドルウェアの 1 つです。
ミドルウェアを使用する理由を詳しく理解するには、次の 2 つのリンクを参照してください:
http://blog.csdn.net/phphot/archive/2009/04/18/4089806.aspx
http://hi. baidu.com/xdh2571/blog/item/8f01fafc4debfc89b801a04b.html
2 ICE の通信構造は何ですか?
ICE は、サービスを提供するサーバーとサービスを求めるクライアントに分かれており、両方のマシンに ICE コンポーネントをインストールする必要があります。
クライアントは、サービスを事前に知っておく必要があります。サーバーはどのようなサービスを提供できますか? どのような形式が利用可能ですか?これは図のプロキシ コードです。クラスとインターフェイスはプロキシ コードで定義されます。サーバー側で定義されるインターフェイスはスケルトンであり、そのインターフェイスの具体的な実装はサーバー アプリケーションです。サーバー アプリケーションは C++、Java、C# などで作成できますが、ICE はサーバー側で作成するための PHP を提供しません。
3 ICE をインストールします
インストール環境: CentOS
1)
cd /etc/yum.repos.d/
wget http://www.zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo
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
4 ICE の例を作成します。目的: クライアントがサービスを呼び出すたびに、サーバーは "hello world" を出力します
基本環境:これは実験目的であり、クライアントとサーバーを CentOS マシンとして扱います
A フォルダーを作成します: mkdir Ice_demo
B ファイル Printer.ice を作成します。この .ice ファイルは ICE スライス ファイルです。サービスが定義されているオブジェクトとインターフェース
module Demo {
void printString(string s)
};
D Server.cpp を作成します
#include
#include
名前空間 std を使用します。
名前空間の使用デモ;
class PrinterI : public Printer {
public:
virtual void printString(const string& s,
const Ice::Current&);
};
void
PrinterI::
printString(const string& s, const Ice::Current&)
{
cout << <<終わり;
}
int
main(int argc, char* argv[])
{
int status = 0;
Ice::CommunicatorPtr ic;
{
ic = Ice::initialize(argc, argv); を試してください。
Ice::ObjectAdapterPtr アダプター
= ic->createObjectAdapterWithEndpoints(
"SimplePrinterAdapter", "default -p 10000");
Ice::ObjectPtr オブジェクト = 新しい PrinterI;
adapter->add(object,
ic->stringToIdentity("SimplePrinter"));
adapter->activate();
ic->waitForShutdown();
} catch (const Ice::Exception& e) {
cerr << e <<終わり;
ステータス = 1;
} catch (const char* msg) {
cerr <<メッセージ <<終わり;
ステータス = 1;
}
if (ic) {
try {
ic->destroy();
} catch (const Ice::Exception& e) {
cerr << e <<終わり;
ステータス = 1;
}
}
ステータスを返します。
}
E
#c++ -私。 -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
require 'Ice.php';
'Printer.php' が必要;
$ic = null;
試してください
{
$ic = Ice_initialize();
$base = $ic->stringToProxy("SimplePrinter:default -p 10000");
$printer = Demo_PrinterPrxHelper::checkedCast($base);
if(!$printer)
throw new RuntimeException("無効なプロキシ");
$printer->printString("Hello World!");
}
catch(Exception $ex)
{
echo $ex;
}
if($ic)
{
// クリーンアップ
try
{
$ic->destroy();
}
catch(Exception $ex)
{
echo $ex;
}
}
?>
H
打开一个终端运行 #./server
打开另一终端运行 php Client.php
発行现每运行一次Client.php,第一终端打出一个Hello World。 ICE は正常に実行されています。
補足: 必要に応じて、データベースへのアクセスや memcached へのアクセスなど、大規模な Web サイトでの ICE の使用が可能です。中写一服务、统一管理和使用を提供します
作者:轩脉刃(yjf512)
出处:(http://www.cnblogs.com/yjf512/)版权指示:本文版权归作者与博客
http://blog.csdn.net/phphot/archive/2009/04/18/4089806.aspx
http://hi.baidu.com/xdh2571/blog/item/8f01fafc4debfc89b801a04b.html
http://www.zeroc.com/
(特に里面の文書)
http://blog. csdn.net/cnhome/archive/2008/11/18/3331279.aspx
LoveJ2EE关注Java迈克尔杰克逊動画站JSON在線ツール
http://biancheng.dnbcw.info/php/337545.html pageNo :9