校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > PHP實現創建一個RPC服務操作示例

PHP實現創建一個RPC服務操作示例

熱門標簽:揚州地圖標注app 騰訊外呼管理系統 青島語音外呼系統招商 岳陽外呼型呼叫中心系統在哪里 山西探意電話機器人 河南電銷卡外呼系統哪家強 百應電話機器人服務 山西回撥外呼系統 昭通辦理400電話

本文實例講述了PHP實現創建一個RPC服務操作。分享給大家供大家參考,具體如下:

RPC全稱為Remote Procedure Call,翻譯過來為"遠程過程調用"。主要應用于不同的系統之間的遠程通信和相互調用。

比如有兩個系統,一個是PHP寫的,一個是JAVA寫的,而PHP想要調用JAVA中的某個類的某個方法,這時候就需要用到RPC了。

怎么調?直接調是不可能,只能是PHP通過某種自定義協議請求JAVA的服務,JAVA解析該協議,在本地實例化類并調用方法,然后把結果返回給PHP。

這里我們用PHP的socket擴展來創建一個服務端和客戶端,演示調用過程。

RpcServer.php代碼如下:

?php
class RpcServer {
  protected $serv = null;

  public function __construct($host, $port, $path) {
    //創建一個tcp socket服務
    $this->serv = stream_socket_server("tcp://{$host}:{$port}", $errno, $errstr);
    if (!$this->serv) {
      exit("{$errno} : {$errstr} \n");
    }
    //判斷我們的RPC服務目錄是否存在
    $realPath = realpath(__DIR__ . $path);
    if ($realPath === false || !file_exists($realPath)) {
      exit("{$path} error \n");
    }

    while (true) {
      $client = stream_socket_accept($this->serv);

      if ($client) {
        //這里為了簡單,我們一次性讀取
        $buf = fread($client, 2048);
        //解析客戶端發送過來的協議
        $classRet = preg_match('/Rpc-Class:\s(.*);\r\n/i', $buf, $class);
        $methodRet = preg_match('/Rpc-Method:\s(.*);\r\n/i', $buf, $method);
        $paramsRet = preg_match('/Rpc-Params:\s(.*);\r\n/i', $buf, $params);
        
        if($classRet  $methodRet) {
          $class = ucfirst($class[1]);
          $file = $realPath . '/' . $class . '.php';
          //判斷文件是否存在,如果有,則引入文件
          if(file_exists($file)) {
            require_once $file;
            //實例化類,并調用客戶端指定的方法
            $obj = new $class();
            //如果有參數,則傳入指定參數
            if(!$paramsRet) {
              $data = $obj->$method[1]();
            } else {
              $data = $obj->$method[1](json_decode($params[1], true));
            }
            //把運行后的結果返回給客戶端
            fwrite($client, $data);
          }
        } else {
          fwrite($client, 'class or method error');
        }
        //關閉客戶端
        fclose($client);
      }
    }
  }

  public function __destruct() {
    fclose($this->serv);
  }
}

new RpcServer('127.0.0.1', 8888, './service');

RpcClient.php代碼如下:

?php

class RpcClient {
  protected $urlInfo = array();
  
  public function __construct($url) {
    //解析URL
    $this->urlInfo = parse_url($url);
    if(!$this->urlInfo) {
      exit("{$url} error \n");
    }
  }
  
  public function __call($method, $params) {
    //創建一個客戶端
    $client = stream_socket_client("tcp://{$this->urlInfo['host']}:{$this->urlInfo['port']}", $errno, $errstr);
    if (!$client) {
      exit("{$errno} : {$errstr} \n");
    }
    //傳遞調用的類名
    $class = basename($this->urlInfo['path']);
    $proto = "Rpc-Class: {$class};" . PHP_EOL;
    //傳遞調用的方法名
    $proto .= "Rpc-Method: {$method};" . PHP_EOL;
    //傳遞方法的參數
    $params = json_encode($params);
    $proto .= "Rpc-Params: {$params};" . PHP_EOL;
    //向服務端發送我們自定義的協議數據
    fwrite($client, $proto);
    //讀取服務端傳來的數據
    $data = fread($client, 2048);
    //關閉客戶端
    fclose($client);
    return $data;
  }
}

$cli = new RpcClient('http://127.0.0.1:8888/test');
echo $cli->hehe();
echo $cli->hehe2(array('name' => 'test', 'age' => 27));

然后分別運行上面兩個腳本(注意,php要添加環境變量)

> php RpcServer.php
> php RpcClient.php

結果如下:

Test.php代碼如下:

?php
class Test {
  public function hehe() {
    return 'hehe';
  }
  public function hehe2($params) {
    return json_encode($params);
  }
}

目錄結構如下:

上面我們自定義的協議,可以隨意修改,只要是客戶端和服務端兩邊能夠統一并能解析。

客戶端通過請求服務端,把要調用的類,方法和參數傳遞給服務端,服務端去通過實例化調用方法返回結果。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php socket用法總結》、《php字符串(string)用法總結》、《PHP數學運算技巧總結》、《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP數據結構與算法教程》、《php程序設計算法總結》及《PHP網絡編程技巧總結》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • PHP遠程調用以及RPC框架
  • php實現的一個簡單json rpc框架實例
  • ThinkPHP內置jsonRPC的缺陷分析
  • PHP采用XML-RPC構造Web Service實例教程
  • 使用PHPRPC實現Ajax安全登錄
  • php中關于codeigniter的xmlrpc的類在進行數據交換時的類型問題
  • AMFPHP php遠程調用(RPC, Remote Procedure Call)工具 快速入門教程
  • php xml-rpc遠程調用
  • 詳解php中流行的rpc框架

標簽:婁底 鎮江 寶雞 宜賓 湛江 銅川 黃南 南陽

巨人網絡通訊聲明:本文標題《PHP實現創建一個RPC服務操作示例》,本文關鍵詞  PHP,實現,創建,一個,RPC,服務,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP實現創建一個RPC服務操作示例》相關的同類信息!
  • 本頁收集關于PHP實現創建一個RPC服務操作示例的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美丝袜自拍制服另类| 亚洲国产精品天堂| 国产欧美日韩视频在线观看| 91精品国产91久久久久久一区二区 | 国产日产欧产精品推荐色| 欧美大片国产精品| 精品国精品国产尤物美女| 欧美成va人片在线观看| 精品福利一区二区三区免费视频| 欧美一卡二卡三卡| 精品久久国产老人久久综合| 日韩精品一区二区在线观看| 久久综合国产精品| 国产精品久久久久三级| 亚洲精选视频免费看| 污片在线观看一区二区| 蜜桃精品视频在线观看| 国产乱妇无码大片在线观看| 国产精品亚洲综合一区在线观看| 国产不卡在线视频| 成人国产电影网| 99久久综合色| 欧美日韩高清一区二区三区| 欧美一级理论片| 久久综合色天天久久综合图片| 久久久蜜桃精品| 国产精品不卡一区| 亚洲成av人影院在线观看网| 玖玖九九国产精品| 成人av资源网站| 欧美日韩一区不卡| 精品国产一区二区精华| 中文字幕日韩av资源站| 午夜精品在线看| 国产精品一区二区在线观看网站| 99国产精品久久久久久久久久久| 欧美性猛片aaaaaaa做受| 日韩免费观看2025年上映的电影 | 欧美极品aⅴ影院| 一区二区三区中文在线| 麻豆91精品91久久久的内涵| 成人h动漫精品一区二| 欧美日韩中文国产| 国产亚洲成年网址在线观看| 亚洲一区免费视频| 国产综合色视频| 欧洲生活片亚洲生活在线观看| 日韩欧美一级二级三级久久久| 国产精品电影院| 免费国产亚洲视频| 色综合激情久久| 精品美女一区二区三区| 一区二区在线观看视频| 黄色资源网久久资源365| 91高清视频在线| 国产亚洲一区二区三区四区| 亚洲成人动漫av| www.亚洲在线| 久久综合九色综合欧美就去吻| 亚洲夂夂婷婷色拍ww47| 国产99一区视频免费| 91精品在线一区二区| 亚洲黄色免费网站| 懂色av一区二区三区蜜臀| 欧美精品第一页| 一区二区三区在线看| 国产 欧美在线| 精品日本一线二线三线不卡| 一区二区三区精品久久久| 国产成人精品影视| 欧美一二三区在线观看| 一区二区三区 在线观看视频| 国产精品一卡二卡在线观看| 日韩一区二区三区精品视频 | 国产一区在线视频| 制服丝袜一区二区三区| 亚洲精品精品亚洲| 不卡在线观看av| 国产欧美一二三区| 韩国成人福利片在线播放| 欧美一区二区三区不卡| 亚洲宅男天堂在线观看无病毒| av中文字幕一区| 国产精品五月天| 国产激情一区二区三区| 精品久久久久一区二区国产| 琪琪久久久久日韩精品| 欧美精品色综合| 亚洲成人av福利| 欧美三级一区二区| 亚洲一级二级三级在线免费观看| 色综合天天天天做夜夜夜夜做| 国产精品嫩草久久久久| 成人国产电影网| 国产精品久久久久一区二区三区共| 国产在线视频不卡二| 精品国产伦一区二区三区观看体验| 日本不卡一二三| 日韩三级伦理片妻子的秘密按摩| 视频一区二区三区中文字幕| 欧美高清性hdvideosex| 日韩极品在线观看| 日韩一区二区三区免费看| 欧美aa在线视频| 欧美不卡视频一区| 国产一区二区视频在线播放| 久久精子c满五个校花| 国产ts人妖一区二区| 中文字幕一区二区三区不卡在线 | 欧美人与禽zozo性伦| 日韩精品高清不卡| 日韩三级免费观看| 国产在线视频精品一区| 国产丝袜欧美中文另类| 国产999精品久久久久久绿帽| 中文一区二区完整视频在线观看| 国产高清成人在线| 亚洲欧美在线观看| 欧美亚洲一区二区三区四区| 天堂精品中文字幕在线| 欧美mv和日韩mv国产网站| 国产成人精品免费看| 自拍偷在线精品自拍偷无码专区| 欧美亚洲国产bt| 免费成人av在线| 国产性天天综合网| 色婷婷国产精品久久包臀| 首页国产欧美日韩丝袜| 久久久五月婷婷| 91在线一区二区三区| 日韩精品欧美精品| 国产人成一区二区三区影院| 91小视频免费观看| 日本怡春院一区二区| 欧美激情综合在线| 欧美视频日韩视频在线观看| 久久99国产精品麻豆| 国产婷婷色一区二区三区在线| 91色.com| 激情小说欧美图片| 亚洲三级电影网站| 欧美电视剧免费观看| 91视视频在线直接观看在线看网页在线看 | 国产精品区一区二区三| 欧洲色大大久久| 国产主播一区二区三区| 亚洲综合一区二区三区| 欧美草草影院在线视频| 色偷偷久久一区二区三区| 久久疯狂做爰流白浆xx| 亚洲精品免费一二三区| 精品久久国产老人久久综合| 91蜜桃免费观看视频| 久久国产成人午夜av影院| 亚洲免费av高清| 久久久久国产免费免费| 欧美日韩一本到| 成人黄色电影在线| 美女视频一区在线观看| 一区二区三区在线不卡| 精品国产乱码久久久久久免费| 91免费看`日韩一区二区| 国产综合久久久久久鬼色 | 久久精品国产亚洲一区二区三区| 国产精品电影院| 精品久久久久久综合日本欧美| 欧美在线你懂的| 成人亚洲一区二区一| 久久疯狂做爰流白浆xx| 亚洲午夜精品久久久久久久久| 欧美国产日韩a欧美在线观看| 制服丝袜中文字幕亚洲| 在线观看日产精品| www.综合网.com| 国产精品一区久久久久| 免费不卡在线观看| 午夜激情久久久| 一区二区三区欧美亚洲| 国产精品色眯眯| 久久久久久久久久久久久夜| 日韩欧美中文一区| 欧美日韩视频专区在线播放| 91网站视频在线观看| 成人av综合在线| 成人午夜av在线| 国产成人av网站| 国产乱码精品一区二区三区五月婷| 婷婷丁香久久五月婷婷| 亚洲一级不卡视频| 一区二区三区欧美在线观看| 亚洲天堂免费看| 国产精品美女久久久久久久| 久久精品一区二区三区不卡牛牛| 日韩视频在线你懂得| 欧美人妇做爰xxxⅹ性高电影| 欧洲一区在线观看| 在线看不卡av| 欧美三级中文字| 欧美日韩国产大片| 欧美午夜宅男影院|