ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルでのヘッセ行列の使用分析について説明します。

PHP_PHP チュートリアルでのヘッセ行列の使用分析について説明します。

WBOY
WBOYオリジナル
2016-07-21 15:07:15944ブラウズ

Hessianとは
Hessianはcauchoが提供するオープンソースのリモート通信プロトコルです。
バイナリ RPC プロトコルを採用し、HTTP 送信に基づいています。サーバー側で追加のファイアウォール ポートを開く必要はありません。
プロトコルの仕様は公開されており、どの言語でも使用できます。
クライアント/サーバーモードを使用します。
リクエスターはクライアント、サービスプロバイダーはサーバーです。
クライアント呼び出しプロセスは、プロセスパラメータを含む呼び出しメッセージをサービスプロセスに送信し、応答メッセージを待ちます。
サーバー側では、通話情報が届くまでプロセスはスリープ状態のままです。
呼び出しメッセージが到着すると、サーバーはプロセスパラメータを取得し、結果を計算し、応答メッセージを送信し、次の呼び出しメッセージを待ちます。最後に、クライアントはプロセスを呼び出して応答メッセージを受け取り、
処理結果を取得します。 、その後、呼び出しの実行が続行されます。

ヘシアンプロトコルワークフローチャート
クライアントプログラムがサーバー関数を要求します
1.クライアントハンドルを呼び出し、送信パラメータを実行します。
2. ローカルシステムカーネルを呼び出してネットワークメッセージを送信します。
3. メッセージがリモートホストに送信されます。
4. サーバーハンドルがメッセージを取得し、パラメータを取得します。
5.リモート処理を実行します。



サーバー関数は結果をクライアントに返します
1.実行プロセスは結果をサーバーハンドルに返します。
2. サーバーハンドルは結果を返し、リモートシステムカーネルを呼び出します。
3. メッセージはローカルホストに送り返されます。
4. クライアントハンドルはカーネルからメッセージを受け取ります。
5. クライアントはハンドルから返されたデータを受け取ります。

ソースコードの解説付き

1. Web サイトのルート ディレクトリと Hessian のアドレスを含む構成ファイルを参照します。

コードをコピーします コードは次のとおりです:

/**
* ファイル名 : config.php
* 目的 : ヘッセ行列設定ファイル
*
* @package system.core.code をサイト全体に適用
* @copyright Copyright (c) 2012
* @since 1.0
*/

// ルートディレクトリ
define( 'PATH' , dirname(__FILE__) . DIRECTORY_SEPARATOR );

// ヘシアン URL アドレス
define( 'HESSIAN_URL' , 'http://qx.com/server.php' );

// IDE: Zend Studio 9.0
// IDE 拡張機能: Toggle Vrapper
?>


2. サーバーを構成します。
コードをコピーします コードは次のとおりです:

/**
* ファイル名:server.php
*
* 参考文献:
* 1.http://hessian.caucho.com/ (Hessian ホームページ)
* 2.http://hessianphp.sourceforge.net/ (Hessian PHP )
* 3.http://sourceforge.net/projects/hessianphp/ (ヘシアン PHP オープンソース)
* 4.http://baike.baidu.com/view/1859857.htm (シングルケースモード)
*
* @author wubaiqing
* @package system.core はサイト全体に適用されます
* @copyright Copyright (c) 2012
* @since 1.0
*/
require_once ( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.php' );
require_once ( PATH . 'extensions/HessianPHP/HessianService.php' );

class HessianServer
{
public function __construct() {}
/**
* 商品詳細 API インターフェース
* @param string $title title
* @param int $price 価格
*/
public function GoodsInfomationApi( $title, $price) {
$price = (int) $price;
return '

ヘッセ行列を使用してリモート メソッドを呼び出します。

タイトル .
価格:'.$price;
}
}

$server = new HessianService( new HessianServer() );
//$server->displayInfo();
$server->handle();

// IDE: Zend Studio 9.0
// IDE 拡張機能: Toggle Vrapper
?>


3. HessianService クラスの displayInfo メソッドを通じて、有効な通信メソッドの数を確認できます。
サーバーを構築するためにハンドル メソッドを使用する必要がある場合、「Hessian Requires POST」プロンプトが表示されれば、サーバーは正常に構築されています。

4. ヘッセ行列をカプセル化します

コードをコピーします コードは次のとおりです:

/**
* 类名 : HessianApi
*
* 参考资料 :
* 1.http://hessian.caucho.com/ ( Hessian主页 )
* 2.http://hessianphp.sourceforge.net/ ( Hessian PHP )
* 3.http://sourceforge.net/projects/hessianphp/ ( Hessian PHP开源 )
* 4.http://baike.baidu.com/view/1859857.htm ( 单例模式 )
*
* @author wubaiqing
 * @package system.core applied to the whole site
 * @copyright Copyright (c) 2012
 * @since 1.0
 */
class HessianApi
{
    /**
     * @var string 接口地址
     */
    private $_url = NULL;

    /**
     * @var result 句柄
     */
    private $_handle = NULL;

    /**
     * @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

?>

5. クライアントリクエストメソッドをカプセル化し、HessianApi クラスを継承します



コードをコピーします


コードは次のとおりです:
/** * クラス名 : Goods * 継承クラス : HessianApi * 目的 : server.php メソッドの呼び出し *
* @author wubaiqing
* @package system.core.code をサイト全体に適用
* @copyright Copyright (c) 2012
* @since 1.0
*/
class Goods extends HessianApi
{
/**
* インターフェースアドレスを設定します
* @param string $url
*/
public function __construct( $url) {
parent::__construct( $url);
}
/**
* 製品情報を取得します
* server.php ファイルの GoodsInfomationApi メソッドを呼び出します
* @param string $title title
* @param string $title 価格
* /
public function getGoodsinfomation ($ Title, $ Price) {
// Java プラットフォームの hessian サービスで型を指定する必要がある場合は、パラメータ、特に整形手術と string = (int) を渡します。 $price;

$result = $this->getHandler()->goodsInfomationApi( $title, $price);
$this->resultLog( 'getGoodsInfomation' , 'インターフェイスにアクセスしますが、インターフェイスはロジック検証されません。 ');
$ の結果を返します。
// IDE: Zend Studio 9.0
// IDE Extension: Toggle Vrapper
?>



6. サーバーインターフェイスをリクエストするためにindex.phpを変更します




コードをコピーします

コードは次のとおりです:



/**

* ファイル名:index.php
** 参考文献:
* 1.http://hessian.caucho.com/ (Hessian ホームページ)
* 2.http://hessianphp.sourceforge.net/ (Hessian PHP )
* 3.http://sourceforge.net/projects/hessianphp/ (ヘシアン PHP オープンソース)* 4.http://baike.baidu.com/view/1859857.htm (シングルケースモード)** @author wubaiqing * @package system.core はサイト全体に適用されます

* @copyright Copyright (c) 2012
* @since 1.0
*/


require_once ( dirname(__FILE__) . DIRECTORY_SEPARATOR .'config.php' );

// ヘシアン拡張ファイルと設定ファイル
require_once ( PATH . 'extensions/HessianPHP/HessianClient.php' );
require_once ( PATH . 'class/HessianApi.php' );


//server.phpメソッドを呼び出す
require_once (PATH . 'class/Goods.php');

// データを取得するためにインターフェースをリクエストします
$goods = new Goods( HESSIAN_URL );

//製品タイトルと価格を設定します。
$title = '北京モバイル リチャージ プラットフォーム';

$price = '50';


// ヘシアンプロトコルをリクエストします
$goodsInfo = $goods->getGoodsInfomation( (string) $title , (int) $price );

//リクエスト結果の印刷
echo ( $goodsInfo );

// IDE: Zend Studio 9.0

// IDE 拡張機能: Toggle Vrapper

?>



www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327574.html技術記事 Hessian とは何ですか? Hessian は、caucho が提供するオープンソースのリモート通信プロトコルです。 バイナリ RPC プロトコルを採用しており、HTTP 送信に基づいています。サーバー側で別のファイアウォール ポートを開く必要はありません。 同意...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP 設計パターンにおける反復子パターンの詳細な分析_PHP チュートリアル次の記事:PHP 設計パターンにおける反復子パターンの詳細な分析_PHP チュートリアル

関連記事

続きを見る