最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探討Hessian在PHP中的使用分析

 更新時間:2013年06月13日 11:09:21   作者:  
本篇文章是對Hessian在PHP中的使用進行了詳細(xì)的分析介紹, 需要的朋友參考下

什么是Hessian
  Hessian是由caucho提供的一種開源的遠(yuǎn)程通訊協(xié)議。
  采用二進制 RPC 協(xié)議,基于 HTTP 傳輸,服務(wù)器端不用另開放防火墻端口。
  協(xié)議的規(guī)范是公開的,可以用于任意語言。
  采用客戶機/服務(wù)器模式。
  請求程序就是一個客戶機,而服務(wù)提供程序就是一個服務(wù)器。
  客戶機調(diào)用進程發(fā)送一個有進程參數(shù)的調(diào)用信息到服務(wù)進程,然后等待應(yīng)答信息。
  在服務(wù)器端,進程保持睡眠狀態(tài)直到調(diào)用信息的到達(dá)為止。
  當(dāng)一個調(diào)用信息到達(dá),服務(wù)器獲得進程參數(shù),計算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個調(diào)用信息,最后,客戶端調(diào)用進程接收答復(fù)信息,
  獲得進程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進行。

Hessian協(xié)議工作流程圖
  客戶端程序請求服務(wù)端函數(shù) 
  1.調(diào)用客戶端句柄,執(zhí)行傳送參數(shù)。
  2.調(diào)用本地系統(tǒng)內(nèi)核發(fā)送網(wǎng)絡(luò)消息。
  3.消息傳送到遠(yuǎn)程主機。
  4.服務(wù)器句柄得到消息并取得參數(shù)。
  5.執(zhí)行遠(yuǎn)程過程。



服務(wù)端函數(shù)返回結(jié)果給客戶端
  1.執(zhí)行的過程將結(jié)果返回服務(wù)器句柄。
  2.服務(wù)器句柄返回結(jié)果,調(diào)用遠(yuǎn)程系統(tǒng)內(nèi)核。
  3.消息傳回本地主機。
  4.客戶句柄由內(nèi)核接收消息。
  5.客戶接收句柄返回的數(shù)據(jù)。

附帶源碼解釋

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

復(fù)制代碼 代碼如下:

<?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.配置服務(wù)端。
復(fù)制代碼 代碼如下:

<?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() {}
    /**
     * 商品詳細(xì)信息APi接口
     * @param string $title 標(biāo)題
     * @param int $price 價格
     */
    public function goodsInfomationApi( $title , $price ) {
        $price = (int) $price;
        return '<h1 style="background-color:#036; color:#fff; font-size:16px; padding:10px 10px 10px 3px;">使用Hessian協(xié)議調(diào)用遠(yuǎn)程方法.</h1> 標(biāo)題:' . $title . '<br>價格:'.$price;
    }
}

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

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


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

4.封裝Hessian接口

復(fù)制代碼 代碼如下:

<?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 存放單例模式數(shù)組
     */
    private static $_objects = array();

    /**
     * 設(shè)置URL地址
     * 實例化HessianClient類
     * 參數(shù)    : (1) url地址 , 2
     *
     * 2.Java調(diào)用字段
     * @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;
    }

    /**
     * 設(shè)置句柄
     * @param result $_handle
     */
    public function setHandler($_handle) {
        $this->_handle = $_handle;
    }

    /**
     * 獲取URL地址
     */
    public function getUrl() {
        return $this->_url;
    }

    /**
     * 設(shè)置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')
     );
    }

    /**
     * 記錄接口調(diào)用信息
     * @param string $method 調(diào)用的方法
     * @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');
    }

    /**
     * 靜態(tài)工廠方法,生成單個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類
復(fù)制代碼 代碼如下:

<?php
/**
 * 類名        : Goods
 * 繼承類        : HessianApi
 * 用途        : 調(diào)用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
{
    /**
     * 設(shè)置接口地址
     * @param string $url
     */
    public function __construct( $url ) {
        parent::__construct( $url );
    }

    /**
     * 獲取商品信息
     * 調(diào)用server.php文件中的goodsInfomationApi方法
     * @param string $title 標(biāo)題
     * @param string $title 價格
     */
    public function getGoodsInfomation( $title , $price )
    {
        // 如果調(diào)用java平臺的hessian服務(wù) 需要指定你傳遞參數(shù)的類型,特別是整形和字符串.
        $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可以請求服務(wù)端接口
復(fù)制代碼 代碼如下:

<?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' );


// 調(diào)用 server.php 方法
require_once ( PATH . 'class/Goods.php');

// 請求接口獲取數(shù)據(jù)
$goods = new Goods( HESSIAN_URL );

// 設(shè)置商品標(biāo)題 , 價格.
$title = '北京移動充值平臺';
$price = '50';

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

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

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

?>


相關(guān)文章

  • PHP學(xué)習(xí)筆記之session

    PHP學(xué)習(xí)筆記之session

    這篇文章我們給大家整理了關(guān)于PHP中session的相關(guān)用法以及知識點,對此有學(xué)習(xí)需要的讀者們可以跟著學(xué)習(xí)下。
    2018-05-05
  • php判斷當(dāng)前操作系統(tǒng)類型

    php判斷當(dāng)前操作系統(tǒng)類型

    這篇文章主要介紹了php判斷當(dāng)前操作系統(tǒng)類型,分為兩種情況一種是服務(wù)器端,一種是客戶端,感興趣的小伙伴們可以參考一下
    2015-10-10
  • 如何理解PHP程序執(zhí)行的過程原理

    如何理解PHP程序執(zhí)行的過程原理

    本文主要介紹了PHP程序指定的過程原理。為了以后能開發(fā)PHP擴展,就一定要了解PHP的執(zhí)行順序。這篇文章就是為C開發(fā)PHP擴展做鋪墊。
    2021-05-05
  • PHP中一些可以替代正則表達(dá)式函數(shù)的字符串操作函數(shù)

    PHP中一些可以替代正則表達(dá)式函數(shù)的字符串操作函數(shù)

    這篇文章主要介紹了PHP中一些可以替代正則表達(dá)式函數(shù)的字符串操作函數(shù),本文總結(jié)的是一些比較特別的字符串操作函數(shù),需要的朋友可以參考下
    2014-11-11
  • PHP安全下載文件的方法

    PHP安全下載文件的方法

    這篇文章主要介紹了PHP安全下載文件的方法,涉及PHP文件的編碼設(shè)置,轉(zhuǎn)換,判斷及下載的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • php實現(xiàn)快速對二維數(shù)組某一列進行組裝的方法小結(jié)

    php實現(xiàn)快速對二維數(shù)組某一列進行組裝的方法小結(jié)

    這篇文章主要介紹了php實現(xiàn)快速對二維數(shù)組某一列進行組裝的方法,涉及PHP數(shù)組遍歷、轉(zhuǎn)換、拆分等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • PHP中simplexml_load_string函數(shù)使用說明

    PHP中simplexml_load_string函數(shù)使用說明

    這個問題遇到好幾次了,今天翻看以前代碼的時候看到,便記下來,需要的朋友可以參考下。
    2011-01-01
  • php截取指定2個字符之間字符串的方法

    php截取指定2個字符之間字符串的方法

    這篇文章主要介紹了php截取指定2個字符之間字符串的方法,通過一個簡單的自定義函數(shù)來實現(xiàn)這一功能,主要涉及php中stripos、substr等方法的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • PHP提取中文首字母

    PHP提取中文首字母

    從別人程序中扒拉出來的提取中文首字母的php代碼不是原創(chuàng)。Dzender的代碼學(xué)習(xí)用
    2008-04-04
  • PHP合并數(shù)組+號和array_merge的區(qū)別

    PHP合并數(shù)組+號和array_merge的區(qū)別

    這篇文章主要介紹了PHP合并數(shù)組+號和array_merge的區(qū)別,PHP的數(shù)組融合一般有兩種做法,一種是直接使用加號相加,另一種則是使用array_merge函數(shù)進行相加,兩者之間有點區(qū)別,需要的朋友可以參考下
    2015-06-06

最新評論

施甸县| 商水县| 长子县| 从江县| 六安市| 筠连县| 札达县| 乌拉特前旗| 苍山县| 锦屏县| 龙山县| 长寿区| 扎囊县| 文山县| 贵定县| 柞水县| 文安县| 宁夏| 元朗区| 嘉荫县| 芦溪县| 上杭县| 镇赉县| 彰化县| 曲麻莱县| 海淀区| 甘泉县| 綦江县| 英德市| 吉水县| 永州市| 兴安盟| 沾益县| 丽水市| 东乌珠穆沁旗| 吉安市| 星座| 高州市| 凌源市| 沾益县| 应用必备|