亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php實現的一個簡單json rpc框架實例

2024-05-04 23:33:32
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了php實現的一個簡單json rpc框架實例,本文給出了RPC服務端和客戶端代碼以及應用實例,需要的朋友可以參考下
 

json rpc 是一種以json為消息格式的遠程調用服務,它是一套允許運行在不同操作系統、不同環境的程序實現基于Internet過程調用的規范和一系列的實現。這種遠程過程調用可以使用http作為傳輸協議,也可以使用其它傳輸協議,傳輸的內容是json消息體。

下面我們code一套基于php的rpc框架,此框架中包含rpc的服務端server,和應用端client;

(一)PHP服務端RPCserver jsonRPCServer.php

 

復制代碼代碼如下:

class jsonRPCServer {
    /**
     *處理一個request類,這個類中綁定了一些請求參數
     * @param object $object
     * @return boolean
     */
    public static function handle($object) {
       // 判斷是否是一個rpc json請求
        if ($_SERVER['REQUEST_METHOD'] != 'POST' || empty($_SERVER['CONTENT_TYPE'])
            ||$_SERVER['CONTENT_TYPE'] != 'application/json') {
            return false;
        }
        // reads the input data
        $request = json_decode(file_get_contents('php://input'),true);
        // 執行請求類中的接口
        try {
            if ($result = @call_user_func_array(array($object,$request['method']),$request['params'])) {
                $response = array ( 'id'=> $request['id'],'result'=> $result,'error'=> NULL );
            } else {
                $response = array ( 'id'=> $request['id'], 'result'=> NULL,
                                        'error' => 'unknown method or incorrect parameters' );}
        } catch (Exception $e) {
            $response = array ('id' => $request['id'],'result' => NULL, 'error' =>$e->getMessage());
        }
       // json 格式輸出
        if (!empty($request['id'])) { // notifications don't want response
            header('content-type: text/javascript');
            echo json_encode($response);
        }
        return true;
    }
}

 

(二)Rpc客戶端,jsonRPCClient.php

復制代碼代碼如下:

<?php
/*
 */
class jsonRPCClient {

 

    private $debug;
    private $url;
    // 請求id
    private $id;
    private $notification = false;
    /**
     * @param $url
     * @param bool $debug
     */
    public function __construct($url,$debug = false) {
        // server URL
        $this->url = $url;
        // proxy
        empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy;
        // debug state
        empty($debug) ? $this->debug = false : $this->debug = true;
        // message id
        $this->id = 1;
    }

    /**
     *
     * @param boolean $notification
     */
    public function setRPCNotification($notification) {
        empty($notification) ? $this->notification = false  : $this->notification = true;
    }

    /**
     * @param $method
     * @param $params
     * @return bool
     * @throws Exception
     */
    public function __call($method,$params) {
        // 檢驗request信息
        if (!is_scalar($method)) {
            throw new Exception('Method name has no scalar value');
        }
        if (is_array($params)) {
            $params = array_values($params);
        } else {
            throw new Exception('Params must be given as array');
        }

        if ($this->notification) {
            $currentId = NULL;
        } else {
            $currentId = $this->id;
        }

       // 拼裝成一個request請求
        $request = array(  'method' => $method,  'params' => $params,'id' => $currentId);
        $request = json_encode($request);
        $this->debug && $this->debug.='***** Request *****'."/n".$request."/n".'***** End Of request *****'."/n/n";
        $opts = array ('http' => array (
                                    'method'  => 'POST',
                                    'header'  => 'Content-type: application/json',
                                    'content' => $request
        ));
        //  關鍵幾部
        $context  = stream_context_create($opts);
  if ( $result = file_get_contents($this->url, false, $context)) {
            $response = json_decode($result,true);
  } else {
   throw new Exception('Unable to connect to '.$this->url);
  }
        // 輸出調試信息
        if ($this->debug) {
            echo nl2br(($this->debug));
        }
        // 檢驗response信息
        if (!$this->notification) {
            // check
            if ($response['id'] != $currentId) {
                throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')');
            }
            if (!is_null($response['error'])) {
                throw new Exception('Request error: '.$response['error']);
            }
            return $response['result'];

        } else {
            return true;
        }
    }
}
?>

 

(三) 應用實例
(1)服務端 server.php

復制代碼代碼如下:

<?php
require_once 'jsonRPCServer.php';

 

 

復制代碼代碼如下:

// member 為測試類
require 'member.php';
// 服務端調用
$myExample = new member();
// 注入實例
jsonRPCServer::handle($myExample)
 or print 'no request';
?>

 

(2)測試類文件,member.php

復制代碼代碼如下:

class member{
    public function getName(){
        return 'hello word ' ;  // 返回字符串
    }
}

 

(3)客戶端 client.php

復制代碼代碼如下:

require_once 'jsonRPCClient.php';

 

$url = 'http://localhost/rpc/server.php';
$myExample = new jsonRPCClient($url);

// 客戶端調用
try {
 $name = $myExample->getName();
    echo $name ;
} catch (Exception $e) {
 echo nl2br($e->getMessage()).'<br />'."/n";
}

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲xxxxx性| 精品久久久久人成| 久国内精品在线| 91黑丝高跟在线| 日韩精品在线私人| 97成人精品视频在线观看| 精品视频久久久久久| 久久精品99久久久久久久久| 精品国产欧美一区二区三区成人| 国产日韩欧美电影在线观看| 色妞久久福利网| 庆余年2免费日韩剧观看大牛| 欧美诱惑福利视频| 欧美不卡视频一区发布| 日本一本a高清免费不卡| 国产精品成人观看视频国产奇米| 国产99视频精品免视看7| 欧美极品少妇xxxxⅹ免费视频| 日韩激情在线视频| 在线播放日韩专区| 黑人巨大精品欧美一区二区一视频| 亚洲精品少妇网址| 成人午夜高潮视频| 欧美精品免费在线观看| 欧美国产高跟鞋裸体秀xxxhd| 欧美午夜久久久| 青青久久av北条麻妃黑人| 国产91色在线播放| 久久视频在线看| 亚洲综合成人婷婷小说| 国产精品自产拍在线观| 亚洲国产精品字幕| 亚洲系列中文字幕| 久久久久久亚洲精品中文字幕| 成人激情电影一区二区| 精品久久久一区| 色综合亚洲精品激情狠狠| 国产午夜精品视频免费不卡69堂| 亚洲最新中文字幕| 97欧美精品一区二区三区| 国产精品毛片a∨一区二区三区|国| 九色精品免费永久在线| 国产欧美亚洲精品| 日韩免费在线电影| 久久久久日韩精品久久久男男| 亚洲色图第三页| 日韩成人性视频| 九九精品在线视频| 最近2019年手机中文字幕| 这里只有视频精品| 成人黄色影片在线| 亚洲无av在线中文字幕| 亚洲丝袜在线视频| 亚洲图片欧美日产| 欧美日韩一二三四五区| 久久中文字幕在线视频| 亚洲在线免费看| 亚洲男人天堂手机在线| 成人a级免费视频| 在线播放国产一区二区三区| 欧美性理论片在线观看片免费| 欧美性生活大片免费观看网址| 97在线看免费观看视频在线观看| 日韩成人中文字幕在线观看| 国产精品美女午夜av| 久久69精品久久久久久久电影好| 久久精品国产一区二区电影| 久久久久久久久网站| 一区三区二区视频| 久久av资源网站| 精品偷拍一区二区三区在线看| 国产成人一区二区在线| 国产中文字幕亚洲| 毛片精品免费在线观看| 色系列之999| 91成人精品网站| 久久久久久999| 日韩国产精品亚洲а∨天堂免| 日韩欧美国产成人| 久久精品国产清自在天天线| 亚洲精品白浆高清久久久久久| 欧美激情在线观看视频| 欧美日本在线视频中文字字幕| 亚洲黄页网在线观看| 国产欧美精品一区二区三区-老狼| 在线观看精品国产视频| 亚洲欧美日韩中文在线制服| 国产精品一二三在线| 国产中文日韩欧美| 亚洲欧美三级伦理| 国产成人精品免高潮费视频| 久久中文字幕在线视频| 欧美成人在线免费| 亚洲欧洲美洲在线综合| 国产精品日韩电影| 日韩亚洲欧美中文高清在线| 国产欧美在线看| 日本高清视频一区| 久久91亚洲精品中文字幕| 国产精品九九久久久久久久| 亚洲精品久久久一区二区三区| 亚洲免费视频网站| 中文字幕欧美视频在线| 97国产精品视频人人做人人爱| 色播久久人人爽人人爽人人片视av| 欧美理论在线观看| 日本欧美国产在线| 中文字幕综合在线| 国产日韩换脸av一区在线观看| 精品久久久久久久大神国产| 日韩极品精品视频免费观看| 日韩69视频在线观看| 欧美与欧洲交xxxx免费观看| 久久精品精品电影网| 欧美激情女人20p| 国产日韩专区在线| 日韩视频在线观看免费| 久久艳片www.17c.com| 亚洲一区二区三区久久| 欧美性xxxx极品hd欧美风情| 国产一区在线播放| 亚洲国产精品va| 免费99精品国产自在在线| 久久激情五月丁香伊人| 成人深夜直播免费观看| www.亚洲成人| 久久久av一区| 欧美中文在线观看国产| 日韩美女在线观看一区| 日韩美女在线观看一区| 欧美成人国产va精品日本一级| 国产精品亚洲第一区| 成人在线激情视频| 欧美国产日韩在线| 久久97精品久久久久久久不卡| 国产精品99蜜臀久久不卡二区| 久久久精品久久久| 一区二区三区天堂av| 亚洲国产天堂久久国产91| 九九久久国产精品| 日韩a**站在线观看| 丝袜亚洲欧美日韩综合| 精品香蕉一区二区三区| 正在播放欧美视频| 成人欧美一区二区三区在线| 亚洲aa在线观看| 北条麻妃一区二区三区中文字幕| 成人av资源在线播放| 精品亚洲男同gayvideo网站| 日韩美女免费视频| 亚洲日本中文字幕免费在线不卡| 中文一区二区视频| 疯狂做受xxxx高潮欧美日本| 热99精品里视频精品| 日韩欧美一区二区三区久久| 日韩欧美aⅴ综合网站发布| 国产精品久在线观看| 日韩中文字幕在线免费观看| 亚洲美女www午夜| 亚洲欧洲国产一区| 粗暴蹂躏中文一区二区三区| 欧美高跟鞋交xxxxxhd| 久久躁狠狠躁夜夜爽| 日韩亚洲国产中文字幕|