电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

PHP遠程調用以及RPC框架

瀏覽:77日期: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
相關文章:
主站蜘蛛池模板: 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 炉门刀边腹板,焦化设备配件,焦化焦炉设备_沧州瑞创机械制造有限公司 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 高压微雾加湿器_工业加湿器_温室喷雾-昌润空气净化设备 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 鲸鱼视觉 -数字展厅多媒体互动展示制作公司 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 股票入门基础知识_股票知识_股票投资大师_格雷厄姆网 | 西安中国国际旅行社(西安国旅) | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 |