Hessianとは
Hessianはcauchoが提供するオープンソースのリモート通信プロトコルです。
バイナリ RPC プロトコルを採用し、HTTP 送信に基づいています。サーバー側で追加のファイアウォール ポートを開く必要はありません。
プロトコルの仕様は公開されており、どの言語でも使用できます。
クライアント/サーバーモードを使用します。
リクエスターはクライアント、サービスプロバイダーはサーバーです。
クライアント呼び出しプロセスは、プロセスパラメータを含む呼び出しメッセージをサービスプロセスに送信し、応答メッセージを待ちます。
サーバー側では、通話情報が届くまでプロセスはスリープ状態のままです。
呼び出しメッセージが到着すると、サーバーはプロセスパラメータを取得し、結果を計算し、応答メッセージを送信し、次の呼び出しメッセージを待ちます。最後に、クライアントはプロセスを呼び出して応答メッセージを受け取り、
処理結果を取得します。 、その後、呼び出しの実行が続行されます。
ヘシアンプロトコルワークフローチャート
クライアントプログラムがサーバー関数を要求します
1.クライアントハンドルを呼び出し、送信パラメータを実行します。
2. ローカルシステムカーネルを呼び出してネットワークメッセージを送信します。
3. メッセージがリモートホストに送信されます。
4. サーバーハンドルがメッセージを取得し、パラメータを取得します。
5.リモート処理を実行します。
サーバー関数は結果をクライアントに返します
1.実行プロセスは結果をサーバーハンドルに返します。
2. サーバーハンドルは結果を返し、リモートシステムカーネルを呼び出します。
3. メッセージはローカルホストに送り返されます。
4. クライアントハンドルはカーネルからメッセージを受け取ります。
5. クライアントはハンドルから返されたデータを受け取ります。
ソースコードの解説付き
1. Web サイトのルート ディレクトリと Hessian のアドレスを含む構成ファイルを参照します。
// ルートディレクトリ
define( 'PATH' , dirname(__FILE__) . DIRECTORY_SEPARATOR );
// ヘシアン URL アドレス
define( 'HESSIAN_URL' , 'http://qx.com/server.php' );
// IDE: Zend Studio 9.0
// IDE 拡張機能: Toggle Vrapper
?>
class HessianServer
{
public function __construct() {}
/**
* 商品詳細 API インターフェース
* @param string $title title
* @param int $price 価格
*/
public function GoodsInfomationApi( $title, $price) {
$price = (int) $price;
return '
$server = new HessianService( new HessianServer() );
//$server->displayInfo();
$server->handle();
// IDE: Zend Studio 9.0
// IDE 拡張機能: Toggle Vrapper
?>
4. ヘッセ行列をカプセル化します
/**
* @var array 存放单例模式数组
*/
private static $_objects = array();
/**
* 设置URL地址
* 实例化HessianClient类
* 参数 : (1) url地址 , 2
*
* 2.Java调用字段
* @param string $url
*/
public function __construct( $url )
{
$this->setUrl( $url );
$handler = new HessianClient ( $this->getUrl (), $this->getOptions () );
$this->setHandler ( $handler );
}
/**
* @return result $_handle 句柄
*/
public function getHandler() {
return $this->_handle;
}
/**
* 设置句柄
* @param result $_handle
*/
public function setHandler($_handle) {
$this->_handle = $_handle;
}
/**
* 获取URL地址
*/
public function getUrl() {
return $this->_url;
}
/**
* 设置URL地址
* @param string $url
*/
public function setUrl($url) {
$this->_url = $url;
}
/**
* typeMap映射Java等平台对象
* @return array
*/
public function getOptions() {
return array (
'version' => 1,
'saveRaw' => TRUE,
'typeMap' => array(
'JavaNullPointException' => 'java.lang.NullPointerException' ,
'StackTraceElement' => 'java.lang.StackTraceElement')
);
}
/**
* 记录接口调用信息
* @param string $method 调用的方法
* @param string $returnMsg 需要记入log的文字信息
*/
public function resultLog( $method , $returnMsg )
{
$logPath = PATH.'/runtime/hessian/';
if( !is_dir( $logPath ) ) {
mkdir($logPath,0777);
}
error_log(date('Ymd H:i:s', time()) . '|' . $method . '|' . $returnMsg."\n", 3, $logPath . date('Y-m-d', time()) . '.log');
}
* 静的ファクトリーメソッド。単一 URL の一意のインスタンスを生成します
* @param string $url
* /
Public static Function Start ($ URL) {
$ key = md5 ($ url)
if (ISSET (SELF :: $ _ Key])) {
Return self::$ _Objects [$ key];
クラス JavaNullPointException は例外 {} を拡張します
クラス StackTraceElement は例外 {} を拡張します
// IDE: Zend Studio 9.0
// IDE 拡張機能: Toggle Vrapper
コードをコピーします
$result = $this->getHandler()->goodsInfomationApi( $title, $price);
$this->resultLog( 'getGoodsInfomation' , 'インターフェイスにアクセスしますが、インターフェイスはロジック検証されません。 ');
$ の結果を返します。
// IDE: Zend Studio 9.0
// IDE Extension: Toggle Vrapper
?>
6. サーバーインターフェイスをリクエストするためにindex.phpを変更します
コードをコピーします
/**
//製品タイトルと価格を設定します。
$title = '北京モバイル リチャージ プラットフォーム';
// ヘシアンプロトコルをリクエストします
$goodsInfo = $goods->getGoodsInfomation( (string) $title , (int) $price );
//リクエスト結果の印刷
echo ( $goodsInfo );
// IDE 拡張機能: Toggle Vrapper