色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

PHP遠程調用以及RPC框架

瀏覽:35日期:2022-09-07 17:39:57
前言

一個項目,從開始到版本更新,一直到最后的版本維護。功能在不斷增多,對應的代碼量也在不斷增加,也就意味著項目變得更不可維護,這時候,我們需要用拆分的方式將一個項目打散,以便開發團隊更好的對項目進行維護。

分模塊

這個階段,一般也是項目的初級階段,由于人手不夠,一個服務端的接口項目只有一個開發進行維護,根據開發的習慣,會把項目分成若干個模塊進行開發,在一個項目下進行部署。

這樣做的缺點在于項目會隨著版本更新而變得不可維護。

PHP遠程調用以及RPC框架

分項目

隨著每個模塊功能的不斷完善,代碼變得更加臃腫。這時候需要對項目進行拆分,比如上面的圖,分成用戶體系項目、支付體系項目。

PHP遠程調用以及RPC框架

CURL

開始大家會采用CURL的方式對外部資源進行訪問。

比如某短信平臺SDK,比如各大第三方提供的SDK,糾結到源碼發現都是直接采用CURL函數的方式進行訪問。

優點在于沒有環境要求,能直接用。 缺點在于并發訪問的資源占用問題。

//新浪微博SDK的http請求部分源碼 /** * Make an HTTP request * * @return string API results * @ignore */ function http($url, $method, $postfields = NULL, $headers = array()) {$this->http_info = array();$ci = curl_init();/* Curl settings */curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);curl_setopt($ci, CURLOPT_ENCODING, '');curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);if (version_compare(phpversion(), ’5.4.0’, ’<’)) { curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, 1);} else { curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, 2);}curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, ’getHeader’));curl_setopt($ci, CURLOPT_HEADER, FALSE);switch ($method) { case ’POST’:curl_setopt($ci, CURLOPT_POST, TRUE);if (!empty($postfields)) { curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); $this->postdata = $postfields;}break; case ’DELETE’:curl_setopt($ci, CURLOPT_CUSTOMREQUEST, ’DELETE’);if (!empty($postfields)) { $url = '{$url}?{$postfields}';}}if ( isset($this->access_token) && $this->access_token ) $headers[] = 'Authorization: OAuth2 '.$this->access_token;if ( !empty($this->remote_ip) ) { if ( defined(’SAE_ACCESSKEY’) ) {$headers[] = 'SaeRemoteIP: ' . $this->remote_ip; } else {$headers[] = 'API-RemoteIP: ' . $this->remote_ip; }} else { if ( !defined(’SAE_ACCESSKEY’) ) {//$headers[] = 'API-RemoteIP: ' . $_SERVER[’REMOTE_ADDR’]; }}curl_setopt($ci, CURLOPT_URL, $url );curl_setopt($ci, CURLOPT_HTTPHEADER, $headers );curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );$response = curl_exec($ci);$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);$this->http_info = array_merge($this->http_info, curl_getinfo($ci));$this->url = $url;if ($this->debug) { echo '=====post data======rn'; var_dump($postfields); echo '=====headers======rn'; print_r($headers); echo ’=====request info=====’.'rn'; print_r( curl_getinfo($ci) ); echo ’=====response=====’.'rn'; print_r( $response );}curl_close ($ci);return $response; }RPC

遠程過程調用協議

RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。

RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。

Yar

鳥哥出品的RPC框架,輕量級框架。

<?phpclass API { /** * the doc info will be generated automatically into service info page. * @params * @return */ public function api($parameter, $option = 'foo') { } protected function client_can_not_see() { }}$service = new Yar_Server(new API());$service->handle();?>

調用代碼

<?php$client = new Yar_Client('http://host/api/');$result = $client->api('parameter);?>

注意的是鳥哥出的東西文檔比較少,需要多調試。

Thrift

thrift是一個軟件框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟件堆棧和代碼生成引擎,以構建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結合的、高效的服務。

遠程調用的意義在于,不同的子項目可以用更適合自己的語言來解決,更有效率的實現需求。

同時,對團隊的開發來講,更能提高整體的技術水平。

SOAP

由于用的XML就不多描述了,畢竟還是json用的多。

JSON-RPC

下面是返回值的標準

--> [

    {'jsonrpc': '2.0', 'method': 'sum', 'params': [1,2,4], 'id': '1'},

    {'jsonrpc': '2.0', 'method': 'notify_hello', 'params': [7]},

    {'jsonrpc': '2.0', 'method': 'subtract', 'params': [42,23], 'id': '2'},

    {'foo': 'boo'},

    {'jsonrpc': '2.0', 'method': 'foo.get', 'params': {'name': 'myself'}, 'id': '5'},

    {'jsonrpc': '2.0', 'method': 'get_data', 'id': '9'} 

    ]

<-- [

    {'jsonrpc': '2.0', 'result': 7, 'id': '1'},

    {'jsonrpc': '2.0', 'result': 19, 'id': '2'},

    {'jsonrpc': '2.0', 'error': {'code': -32600, 'message': 'Invalid Request'}, 'id': null},

    {'jsonrpc': '2.0', 'error': {'code': -32601, 'message': 'Method not found'}, 'id': '5'},

    {'jsonrpc': '2.0', 'result': ['hello', 5], 'id': '9'}

    ]

實際上你會發現我們在給客戶端提供接口的返回值,就是按照這個標準來做的。

相應的,服務端對服務端的數據接收和返回,也要同樣按照這個標準來做。

項目拆分帶來的變化項目細化

一個模塊對應一個項目,項目之間通過基于REST的接口標準進行面向資源的數據訪問。

人員需求

項目拆分的前提是一個項目不足以滿足現有的業務發展要求,也就意味著拆分之后的開發人員數量的擴增。

游擊隊向正規軍編制的跨越!

文檔

更多的項目也就意味著更多的接口調用文檔,適當的處理文檔才能更好的提高團隊協作效率。

后記

服務的遠程調用在于怎么合理的把一個正在變得不可維護的項目從焦油坑中解救出來,并提高項目整體能承載的業務量,不過,世界上沒有銀彈。

以上就是PHP遠程調用以及RPC框架的詳細內容,更多關于PHP遠程調用的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 成人性免费视频 | 美国三级在线 | 韩国一级永久免费观看网址 | 伊人久久青草青青综合 | 欧美日韩另类国产 | 国产大陆精品另类xxxx | 欧美一级久久久久久久久大 | 国产精品久久久精品视频 | 久久久久国产视频 | 国产成人3p视频免费观看 | 亚洲二区在线观看 | baby在线观看免费观看 | 国产偷国产偷亚洲高清在线 | 久久久久久久久国产 | 久久99网站 | 久久精品国产亚洲a | 成人三级在线播放线观看 | 久草在线免费播放 | 91免费看片 | 国产高清精品毛片基地 | 国产成人免费高清视频网址 | 久艹精品| 中文一区在线 | 国产成人精品亚洲日本语音 | 草草影院视频 | 目韩一区二区三区系列片丶 | 亚洲国产三级在线观看 | 亚洲二区在线播放 | 网红毛片 | 成人毛片在线 | 成人免费小视频 | 免费特黄一级欧美大片在线看 | 亚洲欧美一区二区三区在线观看 | 久久久成人网 | 日韩三级视频在线观看 | 91久久青青草原线免费 | 日韩在线二区全免费 | 久久免费小视频 | 精品欧美一区视频在线观看 | 免费观看欧美精品成人毛片能看的 | 久久99精品这里精品3 |