中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么PHP中使用Hessian

發布時間:2020-12-22 15:02:53 來源:億速云 閱讀:167 作者:Leah 欄目:開發技術

怎么PHP中使用Hessian?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

什么是Hessian
  Hessian是由caucho提供的一種開源的遠程通訊協議。
  采用二進制 RPC 協議,基于 HTTP 傳輸,服務器端不用另開放防火墻端口。
  協議的規范是公開的,可以用于任意語言。
  采用客戶機/服務器模式。
  請求程序就是一個客戶機,而服務提供程序就是一個服務器。
  客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。
  在服務器端,進程保持睡眠狀態直到調用信息的到達為止。
  當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,
  獲得進程結果,然后調用執行繼續進行。

Hessian協議工作流程圖
  客戶端程序請求服務端函數 
  1.調用客戶端句柄,執行傳送參數。
  2.調用本地系統內核發送網絡消息。
  3.消息傳送到遠程主機。
  4.服務器句柄得到消息并取得參數。
  5.執行遠程過程。

怎么PHP中使用Hessian

服務端函數返回結果給客戶端
  1.執行的過程將結果返回服務器句柄。
  2.服務器句柄返回結果,調用遠程系統內核。
  3.消息傳回本地主機。
  4.客戶句柄由內核接收消息。
  5.客戶接收句柄返回的數據。

怎么PHP中使用Hessian

附帶源碼解釋

1.引用配置文件,包括網站根目錄,以及Hessian的地址。

復制代碼 代碼如下:


<?php
/**
 * 文件名        : config.php
 * 用途        : Hessian配置文件
 *
 * @package system.core.code applied to the whole site
 * @copyright Copyright (c) 2012
 * @since 1.0
 */

// 根目錄
define( 'PATH' , dirname(__FILE__) . DIRECTORY_SEPARATOR );

// Hessian Url地址
define( 'HESSIAN_URL' , 'http://qx.com/server.php' );

// IDE : Zend Studio 9.0
// IDE Extension : Toggle Vrapper
?>

2.配置服務端。

復制代碼 代碼如下:


<?php
/**
 * 文件名        : server.php
 *
 * 參考資料    :
 * 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 <xinxiangmo@gmail.com>
 * @package system.core applied to the whole site
 * @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 標題
     * @param int $price 價格
     */
    public function goodsInfomationApi( $title , $price ) {
        $price = (int) $price;
        return '<h2 >使用Hessian協議調用遠程方法.</h2> 標題:' . $title . '<br>價格:'.$price;
    }
}

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

// IDE : Zend Studio 9.0
// IDE Extension : Toggle Vrapper
?>

3.可以通過HessianService類中的displayInfo方法去查看開啟多少個通訊方法。
如果搭建服務端要使用handle方法,如出現Hessian Requires POST提示,服務端就已經搭建成功。

4.封裝Hessian接口

復制代碼 代碼如下:


<?php
/**
 * 類名        : 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 <xinxiangmo@gmail.com>
 * @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::$_objects[$key]) ) {
            return self::$_objects[$key];
        }

        self::$_objects[$key] = new HessianApi( $url );
        return self::$_objects[$key];
    }
}

class JavaNullPointException extends Exception {}

class StackTraceElement extends Exception {}

// IDE : Zend Studio 9.0
// IDE Extension : Toggle Vrapper

?>

5.封裝客戶端請求方法,繼承HessianApi類

復制代碼 代碼如下:


<?php
/**
 * 類名        : Goods
 * 繼承類        : HessianApi
 * 用途        : 調用server.php方法
 *
 * @author wubaiqing <xinxiangmo@gmail.com>
 * @package system.core.code applied to the whole site
 * @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 標題
     * @param string $title 價格
     */
    public function getGoodsInfomation( $title , $price )
    {
        // 如果調用java平臺的hessian服務 需要指定你傳遞參數的類型,特別是整形和字符串.
        $price = (int) $price;

        $result = $this->getHandler()->goodsInfomationApi( $title , $price );
        $this->resultLog( 'getGoodsInfomation' , '訪問接口,但接口沒有進行邏輯驗證.');
        return $result;
    }
}

// IDE : Zend Studio 9.0
// IDE Extension : Toggle Vrapper
?>

6.修改index.php可以請求服務端接口

復制代碼 代碼如下:


<?php
/**
* 文件名 : index.php
*
* 參考資料 :
* 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 <xinxiangmo@gmail.com>
* @package system.core applied to the whole site
* @copyright Copyright (c) 2012
* @since 1.0
*/


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

// Hessian 擴展及配置文件
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';

// 請求Hessian協議
$goodsInfo = $goods->getGoodsInfomation( (string) $title , (int) $price );

// 打印請求結果
echo ( $goodsInfo );

// IDE : Zend Studio 9.0
// IDE Extension : Toggle Vrapper

?>
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江达县| 浠水县| 武穴市| 搜索| 嘉荫县| 利辛县| 海兴县| 灵山县| 武安市| 临泽县| 和平县| 老河口市| 武川县| 广安市| 北川| 徐水县| 南昌县| 和平县| 晴隆县| 蒲城县| 青海省| 台北市| 阿尔山市| 南丰县| 乳山市| 寿光市| 宾阳县| 福鼎市| 江源县| 尚义县| 甘谷县| 临桂县| 左云县| 陇川县| 句容市| 峨山| 子长县| 昌邑市| 关岭| 东台市| 嵩明县|