PHP ミドルウェア -- ICE

WBOY
リリース: 2016-06-23 14:31:11
オリジナル
971 人が閲覧しました

はじめに: これは、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
ログイン後にコピー

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

4 ICE の例を作成します。目的: クライアントがサービスを呼び出すたびに、サーバーは "hello world" を出力します

基本環境:これは実験目的であり、クライアントとサーバーを CentOS マシンとして扱います

A フォルダーを作成します: mkdir Ice_demo

B ファイル Printer.ice を作成します。この .ice ファイルは ICE スライス ファイルです。サービスが定義されているオブジェクトとインターフェース

module Demo {

void printString(string s)
};


C #slice2cpp Printer.ice // 2 つの Printer.h を生成します。および Printer.cpp ファイル

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート