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

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

詳解php中流行的rpc框架

瀏覽:10日期:2022-09-07 09:34:56
目錄什么是RPC框架?遠程調用原理遠程調用的好處RPC與Socket有什么區別?RPC與REST有什么區別?php中流行的rpc框架有哪些phprpc安裝開始使用yar下載安裝開始使用什么是RPC框架?

通常我們調用一個php中的方法,比如這樣一個函數方法: localAdd(10, 20),localAdd方法的具體實現要么是用戶自己定義的,要么是php庫函數中自帶的,也就說在localAdd方法的代碼實現在本地,它是一個本地調用!

遠程調用原理

比如 A (client) 調用 B (server) 提供的remoteAdd方法:

1.首先A與B之間建立一個TCP連接;

2.然后A把需要調用的方法名(這里是remoteAdd)以及方法參數(10, 20)序列化成字節流發送出去;

3.B接受A發送過來的字節流,然后反序列化得到目標方法名,方法參數,接著執行相應的方法調用(可能是localAdd)并把結果30返回;

4.A接受遠程調用結果,輸出30。

RPC框架就是把我剛才說的這幾點些細節給封裝起來,給用戶暴露簡單友好的API使用。

遠程調用的好處

解耦:當server需要對方法內實現修改時,client完全感知不到,不用做任何變更;這種方式在跨部門,跨公司合作的時候經常用到,并且方法的提供者我們通常稱為:服務的暴露。

RPC與Socket有什么區別?

通過上面的簡單闡述,好像RPC與Socket 好像啊。都是調用遠程的方法,都是client/server模式,我之前也寫了一篇文章: 細說socket 那他們有啥區別呢?

RPC(遠程過程調用)采用客戶機/服務器模式實現兩個進程之間相互通信。socket是RPC經常采用的通信手段之一,RPC是在Socket的基礎上實現的,它比socket需要更多的網絡和系統資源。除了Socket,RPC還有其他的通信方法,比如:http、操作系統自帶的管道等技術來實現對于遠程程序的調用。微軟的Windows系統中,RPC就是采用命名管道進行通信。

RPC與REST有什么區別?

通過了解RPC后,我們知道是RPC是client/server模式的,調用遠程的方法,REST也是我們熟悉的一套API調用協議方法,它也是基于client/server模式的,調用遠程的方法的,那他倆又有啥區別呢?

REST API 和 RPC 都是在 Server端 把一個個函數封裝成接口暴露出去,以供 Client端 調用,不過 REST API 是基于HTTP協議的,REST致力于通過http協議中的POST/GET/PUT/DELETE等方法和一個可讀性強的URL來提供一個http請求。而 RPC 則可以不基于 HTTP協議因此,如果是后端兩種語言互相調用,用 RPC 可以獲得更好的性能(省去了 HTTP 報頭等一系列東西),應該也更容易配置。如果是前端通過 AJAX 調用后端,那么用 REST API 的形式比較好(因為無論如何也避不開 HTTP 這道坎)。

php中流行的rpc框架有哪些

既然php是世界上最好的語言,那php中流行的RPC框架有哪些呢?

先列舉下: phprpc,yar, thrift, gRPC, swoole, hprose

因為時間和精力有限,不可能一個一個的去學習和使用,我選幾個世面上用的最多的幾個用下吧。因為RPC原理是一樣的,都是Client/Server模式,只是每個框架的使用方式不一樣而已。

主要講解一下 phprpc 和 yar 是我目前聽說和接觸最多的了。

phprpc

先從官網下載最新穩定版的phprpc:下載鏈接 解壓。

安裝

我們會發現里面有很多文件和文件夾,結構如下:

dhparams/ pecl/ bigint.php compat.php phprpc_date.php xxtea.php dhparams.php phprpc_server.php phprpc_client.php

其中有dhparams和pecl是文件夾,pecl中的是php的xxtea擴展,按照官網的描述,可以安裝也可以不安裝,不安裝phprpc也是可以運行的。但是如果你需要更快的加密處理能力,可以安裝下。

我還是安裝吧。畢竟加密能力更快,是好事:

安裝步驟如下,先將pecl下的xxtea文件夾復制到php源碼的etx目錄:/lamp/php-5.4.11/ext下。然后用phpize進行擴展重新編譯。

[root@localhost /]# cd /lamp/php-5.4.11/ext/xxtea

[root@localhost xxtea]# /usr/local/php/bin/phpize

[root@localhost xxtea]# ./configure --enable-xxtea=shared --with-php-config=/usr/local/php/bin/php-config

make && make install

OK ,編譯完成,提示我們xxtea.so已經在/usr/local/php/lib/php/extensions/no-debug-zts-20100525/xxtea.so 下了。

下面,我們就需要在php.ini的最后將這個xxtea.so加上:

[root@localhost /]# vi /usr/local/php/etc/php.ini 

[xxtea]

extension=xxtea.so

加好了后,我們需要重啟下apache或者php-fpm

重啟apache

[root@localhost /]# /usr/local/apache/bin/apachectl restart

平滑重啟php-fpm

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

重啟完畢后,打開phpinfo()頁面,搜索一下,應該就能夠看到xxtea了。

開始使用

先來個簡單的例子,phprpc也是分為服務器端和客戶端的。所以文件夾中對應的就是phprpc_server.php 和 phprpc_client.php

我們參考官網的幾個例子,練習下:

server.php 服務端:這樣寫就完成了一個最簡單的helloword的接口。

<?phpinclude ('phprpc/phprpc_server.php');function HelloWorld() { return ’Hello World!’;}$server = new PHPRPC_Server();$server->add(’HelloWorld’);$server->start();

運行下server.php,居然報錯了!!!

PHP Strict Standards:  Non-static method PHPRPC_Server::initSession()....

Cannot redeclare gzdecode().....

google了下,說是先把 phprpc_server.php的413行的initSession()改成static function

static function initSession() { ****}

這么大的錯誤,phprpc是怎么發布的!!!

在把compat.php 的第 71行的 gzdecode()函數,php5.4已經實現了這個函數了。這樣函數就被重寫了,就報錯了,所以加個判斷:

if (!function_exists(’gzdecode’)) { //將gzdecode函數包括進來}

再運行下server.php 。不報錯了。輸出:

phprpc_functions='YToxOntpOjA7czo5OiJoZWxsb3dvcmQiO30=';

我們接下來寫客戶端 client.php, 看是如何寫的?

<?phpinclude ('phprpc/phprpc_client.php');$client = new PHPRPC_Client(’http://127.0.0.1/server.php’);echo $client->HelloWorld();?>

我們在執行以下client.php,如愿以償的輸出了:

Hello Word!

這樣一個簡單的Server/Clent交付就搞定了。雖然中間出了點差錯,但是總體來說還是蠻簡單易懂的!

其他的更高級的用法可以參考官網的。

yar

yar 是國內著名的php大神鳥哥惠新宸的大作,在微博產品中已經開始使用。它也是一款rpc框架。它由于使用純C編寫的用于php的擴展,所以,效率應該是蠻高的,而且支持異步并行,這點還是贊的。

下載安裝

官網下載:http://pecl.php.net/package/yar最新的版本 yar-1.2.4.tgz

然后解壓復制到php源碼的etx目錄:/lamp/php-5.4.11/ext下。然后用phpize進行擴展重新編譯。

[root@localhost yar-1.2.4]# /usr/local/php/bin/phpize

[root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config

但是出現了點問題:提示,curl 有問題:

configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/

估計是我本機curl 有問題,那用yum 安裝一下吧:

yum -y install curl-devel

安裝完成curl 后繼續編譯安裝,就沒啥問題了:

[root@localhost yar-1.2.4]# /usr/local/php/bin/phpize

[root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config

[root@localhost yar-1.2.4]# make && make install

成功之后,提示我們 yar.so 擴展在已經在/usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 下了。

我們vi編輯一下 php.ini ,最后面加上yar.so擴展,然后重啟一下 apache 或者php-pfm就可以了。

[root@localhost /]# vi /usr/local/php/etc/php.ini 

[yar]

extension=yar.so

好。加好了后,我們需要重啟下apache或者php-fpm

重啟apache

[root@localhost /]# /usr/local/apache/bin/apachectl restart

平滑重啟php-fpm

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

重啟完畢后,打開phpinfo()頁面,搜索一下,應該就能夠看到yar了。

開始使用

和其他的rpc框架一樣,yar也是server/client模式,所以,我們也一樣,開始寫一個簡單的例子來說下如何調用。

yar_server.php表示服務器端

<?phpclass API { public function api($parameter, $option = 'foo') { return $parameter; } protected function client_can_not_see() { }}$service = new Yar_Server(new API());$service->handle();

好,我們在瀏覽器里運行一下,就會出現如下圖所示的輸出。很高端啊!!!鳥哥說這樣做的用途是可以一目了然的知道我這個rpc提供了多少接口,把api文檔都可以省略了。

詳解php中流行的rpc框架

好,我們開始寫yar_client.php 這個是客戶端:

$client = new Yar_Client('http://127.0.0.1/yar_server.php');echo $client->api(’helo word’);

像其他的 swoole,hprose等基本都是這個原理,只是看誰的功能更加,用起來更順手罷了。

以上就是詳解php中流行的rpc框架的詳細內容,更多關于php中流行的rpc框架的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 泰安办公家具-泰安派格办公用品有限公司 | 在线PH计-氧化锆分析仪-在线浊度仪-在线溶氧仪- 无锡朝达 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 电动不锈钢套筒阀-球面偏置气动钟阀-三通换向阀止回阀-永嘉鸿宇阀门有限公司 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 | 浙江寺庙设计-杭州寺院设计-宁波寺庙规划_汉匠 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 万博士范文网-您身边的范文参考网站Vanbs.com | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 中细软知识产权_专业知识产权解决方案提供商 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 硫化罐_蒸汽硫化罐_大型硫化罐-山东鑫泰鑫智能装备有限公司 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 二次元影像仪|二次元测量仪|拉力机|全自动影像测量仪厂家_苏州牧象仪器 | 健康管理师报考条件,考试时间,报名入口—首页 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 |