国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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
相關文章:
主站蜘蛛池模板: 国产黄色小视频在线观看 | 亚洲高清中文字幕一区二区三区 | 国产成年人在线观看 | 性夜影院爽黄a爽免费看网站 | 成人av手机在线观看 | 精品欧美一区二区三区在线 | 九久久 | 久久精品国产一区二区三区日韩 | 黄色三级免费网站 | 精品国产九九 | 久久久精品视频免费观看 | 国产精品2019| 国产激情一区二区三区四区 | 国产美女91视频 | 欧美精品成人 | 免费a级| 欧美亚洲日本视频 | 亚洲综合色dddd26 | 色老久久精品偷偷鲁一区 | 视频精品一区 | 日产国产精品久久久久久 | 亚洲欧美在线精品一区二区 | 日本美女一区二区三区 | 亚洲一区二区视频 | 午夜一级影院 | 亚洲欧美在线播放 | 黄色成人免费网站 | 欧美一线不卡在线播放 | 日韩三级在线 | 亚洲国产精品免费观看 | 狠狠五月深爱婷婷网 | 一级毛片在线播放免费 | 欧美激情伦妇在线观看 | 久久婷五月天 | 高跟丝袜美女一级毛片 | 日韩三级中文字幕 | 国产小片 | 色综合久久综合 | 免费人成在线观看网站视频 | 成人7777| 日韩一区精品 |