<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Hessian通訊協(xié)議【附PHP源代碼】

       

      提示:
        綠色加粗有下劃線是文本的鏈接
        藍(lán)色加粗強(qiáng)調(diào)
        紅色加粗重點(diǎn)

      PHP源碼:
        點(diǎn)擊下載

        

      什么是Hessian

        

        Hessian是由caucho提供的一種開源的遠(yuǎn)程通訊協(xié)議。

        采用二進(jìn)制 RPC 協(xié)議,基于 HTTP 傳輸,服務(wù)器端不用另開放防火墻端口。

        協(xié)議的規(guī)范是公開的,可以用于任意語(yǔ)言。

        采用客戶機(jī)/服務(wù)器模式。

        請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。

        客戶機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。

        在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息的到達(dá)為止。

        當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,

        獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。

       

      Hessian協(xié)議工作流程圖

        

        客戶端程序請(qǐng)求服務(wù)端函數(shù) 

        1.調(diào)用客戶端句柄,執(zhí)行傳送參數(shù)。

        2.調(diào)用本地系統(tǒng)內(nèi)核發(fā)送網(wǎng)絡(luò)消息。

        3.消息傳送到遠(yuǎn)程主機(jī)。

        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.消息傳回本地主機(jī)。

        4.客戶句柄由內(nèi)核接收消息。

        5.客戶接收句柄返回的數(shù)據(jù)。

        

       

        

      Hessian的優(yōu)、缺點(diǎn)

        

        優(yōu)缺點(diǎn)在實(shí)踐中根據(jù)使用和同事反饋情況而寫的,只代表個(gè)人的一些觀點(diǎn)。

        
        優(yōu)點(diǎn)
        1.目前的WEB端基本上都支持hessian,hessian本身就是使用http的傳輸協(xié)議,來(lái)保證安全性和穩(wěn)定性。

        2.通信速度不錯(cuò)。(數(shù)據(jù)少的時(shí)候)。

        3.可以以對(duì)象方式接受數(shù)據(jù)。

        

        缺點(diǎn)

        1.報(bào)錯(cuò)機(jī)制不夠完善。

        2.沒有事務(wù)處理。

        3.PHP和Java之間經(jīng)常會(huì)出現(xiàn)一些問題,如編碼,需強(qiáng)制轉(zhuǎn)換字符等。(已經(jīng)在源碼包體現(xiàn)了

        4.返回?cái)?shù)據(jù)量大,總會(huì)感覺有延遲的情況。(返回?cái)?shù)據(jù)加緩存機(jī)制可以避免)

       

      附帶源碼解釋

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

       2.我本地配置的虛擬主機(jī)(域名qx.com),不會(huì)配置虛擬主機(jī)請(qǐng)參考我之前搭建環(huán)境文章。

      <?php
      /**
       * 文件名        : config.php
       * 創(chuàng)建人        : 吳佰清
       * 創(chuàng)建時(shí)間    : 2012-05-09 11:12
       * 用途        : Hessian配置文件
       *
       * @author wubaiqing <xinxiangmo@gmail.com>
       * @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
      ?>

        3.下載HessianPHP.

        4.配置服務(wù)端。

      <?php
      /**
       * 文件名        : server.php
       * 創(chuàng)建人        : 吳佰清
       * 創(chuàng)建時(shí)間    : 2012-05-09 11:54
       *
       * 參考資料    :
       * 1.http://hessian.caucho.com/ ( Hessian主頁(yè) )
       * 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 價(jià)格
           */
          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>價(jià)格:'.$price;
          }
      }
      
      $server = new HessianService( new HessianServer() );
      //$server->displayInfo();
      $server->handle();
      
      // IDE : Zend Studio 9.0
      // IDE Extension : Toggle Vrapper
      ?>


       5.可以通過HessianService類中的displayInfo方法去查看開啟多少個(gè)通訊方法。

        如果搭建服務(wù)端要使用handle方法,如出現(xiàn)Hessian Requires POST提示,服務(wù)端就已經(jīng)搭建成功。

       

       6.封裝Hessian接口

      <?php
      /**
       * 類名        : HessianApi
       * 創(chuàng)建人        : 吳佰清
       * 創(chuàng)建時(shí)間    : 2012-05-08 18:00
       * 
       * 參考資料    : 
       * 1.http://hessian.caucho.com/ ( Hessian主頁(yè) )
       * 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地址
           * 實(shí)例化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等平臺(tái)對(duì)象
           * @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)工廠方法,生成單個(gè)URL的唯一實(shí)例 * @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 ?>

       7.封裝客戶端請(qǐng)求方法,繼承HessianApi類

      <?php
      /**
       * 類名        : Goods
       * 繼承類        : HessianApi
       * 創(chuàng)建人        : 吳佰清
       * 創(chuàng)建時(shí)間    : 2012-05-09 12:12
       * 用途        : 調(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 價(jià)格
           */
          public function getGoodsInfomation( $title , $price )
          {
              // 如果調(diào)用java平臺(tái)的hessian服務(wù) 需要指定你傳遞參數(shù)的類型,特別是整形和字符串.
              $price = (int) $price; 
              
              $result = $this->getHandler()->goodsInfomationApi( $title , $price );
              $this->resultLog( 'getGoodsInfomation' , '訪問接口,但接口沒有進(jìn)行邏輯驗(yàn)證.');
              return $result;
          }
      }
      
      // IDE : Zend Studio 9.0
      // IDE Extension : Toggle Vrapper
      ?>

       8.修改index.php可以請(qǐng)求服務(wù)端接口

      <?php 
      /**
       * 文件名        : index.php
       * 創(chuàng)建人        : 吳佰清
       * 創(chuàng)建時(shí)間    : 2012-05-09 11:57
       *
       * 參考資料    :
       * 1.http://hessian.caucho.com/ ( Hessian主頁(yè) )
       * 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 擴(kuò)展及配置文件
      require_once ( PATH . 'extensions/HessianPHP/HessianClient.php' );
      require_once ( PATH . 'class/HessianApi.php' );
      
      
      // 調(diào)用 server.php 方法
      require_once ( PATH . 'class/Goods.php');
      
      // 請(qǐng)求接口獲取數(shù)據(jù)
      $goods = new Goods( HESSIAN_URL );
      
      // 設(shè)置商品標(biāo)題 , 價(jià)格.
      $title = '北京移動(dòng)充值平臺(tái)';
      $price = '50';
      
      // 請(qǐng)求Hessian協(xié)議
      $goodsInfo = $goods->getGoodsInfomation( (string) $title , (int) $price );
      
      // 打印請(qǐng)求結(jié)果
      echo ( $goodsInfo );
      
      // IDE : Zend Studio 9.0
      // IDE Extension : Toggle Vrapper
      
      ?>

       

      參考資料

        1.Hessian主頁(yè):http://hessian.caucho.com/Hessian

        2.PHP實(shí)現(xiàn)主頁(yè):http://hessianphp.sourceforge.net/

        3.HessianPHP開源項(xiàng)目主頁(yè):http://sourceforge.net/projects/hessianphp/

        4.RMI協(xié)議:http://baike.baidu.com/view/99017.htm

        5.維基百科:http://en.wikipedia.org/wiki/Hessian

        6.PHP源碼:https://files.cnblogs.com/wubaiqing/Hessian.zip

       

      posted @ 2012-05-09 17:48  吳佰清  閱讀(7256)  評(píng)論(4)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲精品成人久久av| 亚洲国产成人无码电影| 在线国产精品中文字幕| 国产乱子伦一区二区三区四区五区| 国产区精品视频自产自拍| 日韩一区二区三区水蜜桃| 久久久天堂国产精品女人| 小污女小欲女导航| 亚洲欧洲一区二区综合精品| 狠狠做五月深爱婷婷伊人| 无码av免费毛片一区二区| 亚洲天堂一区二区三区三州| 国产成人毛片无码视频软件| 亚洲熟女乱色一区二区三区| 网友偷拍视频一区二区三区| 精品国产精品中文字幕| 福建省| 国产区图片区小说区亚洲区| 91中文字幕一区二区| 国产短视频精品一区二区| 国产a在视频线精品视频下载| 国产又爽又黄的精品视频| 一出一进一爽一粗一大视频| 波多野结衣久久一区二区| 亚洲精品一区二区美女| 湟中县| 国产午夜精品理论大片| 麻花传剧mv在线看免费| 久久精品国产再热青青青| 久久久久久久久久久免费精品| 久久亚洲2019中文字幕| 一本色道久久东京热| 福利一区二区不卡国产| 亚洲精品久久麻豆蜜桃| 国产真正老熟女无套内射| 国产欧美日韩一区二区加勒比| 亚洲AV无码久久精品日韩| 国产精品久久久午夜夜伦鲁鲁| 久久人妻精品国产| 久久精品青青大伊人av| 国产一区二区三区黄色片|