摘要:的框架的話語言的話首選的當(dāng)然是鳥哥的,支持并行等等,總之有很多優(yōu)點。首先查看了鳥哥的文章并行的框架,對的基本原理有了一個認(rèn)識,做了一個簡單的請求頁面,具體見鳥哥博客,沒問題,接下來就是對現(xiàn)有項目的改造了。最后感謝鳥哥寫出這么牛掰的東西。
公司新上了個頻道,需要我負(fù)責(zé)的幾個頻道提供接口,因為進(jìn)度比較趕,就直接寫了web的 http 接口供同事訪問。
后來訪問量越來越大,出現(xiàn)了很多問題,例如:因為是json傳遞數(shù)據(jù),偶爾會出現(xiàn)亂碼的情況.他們是在php文件中直接調(diào)用的接口,如果網(wǎng)絡(luò)情況不好會出現(xiàn)頁面很慢的情況。老板說要解決掉這個問題。想了很多辦法,最后決定從網(wǎng)絡(luò)方面入手。決定采用RPC來避免http的請求。
RPC的框架的話,php語言的話首選的當(dāng)然是鳥哥的yar,支持并行等等,總之有很多優(yōu)點。
首先查看了鳥哥的文章 Yar – 并行的RPC框架(Concurrent RPC framework) ,對Yar的基本原理有了一個認(rèn)識,做了一個簡單的請求頁面,具體見鳥哥博客,沒問題,接下來就是對現(xiàn)有項目的改造了。
原來有項目是用phpcms(沒有使用生成功能)和YII做的。因為phpcms相對而言要簡單的多,所以先從phpcms入手,來對框架進(jìn)行改造,加入Yar的機制。
原來所有的外部接口全部是通過phpcms的api機制來實現(xiàn)的,所以先從入口文件入手,入口文件的代碼如下:
define(‘PHPCMS_PATH’, dirname(FILE).DIRECTORY_SEPARATOR);
include PHPCMS_PATH.’phpcms/base.php’;
$param = pc_base::load_sys_class(‘param’);
$op = isset($GET["op"]) && trim($_GET["op"]) ? trim($_GET["op"]) : exit(‘Operation can not be empty’);
if (!preg_match(‘/([^a-z]+)/i’,$op) && file_exists(PHPCMS_PATH.’api/’.$op.’.php’)) {
include PHPCMS_PATH.’api/’.$op.’.php’;
} else {
exit(‘API handler does not exist’);
}
文件非常簡單,就是引入了base基本類,還有很多判斷,因為Yar的服務(wù)端最好不要有數(shù)組,所以需要對判斷等進(jìn)行改造,取消所有的輸出,將必要的錯誤判斷以return的方法返回。幸運的是,api的入口文件并沒有初始化路由,所以就省去了好多操作,只需要對入口文件做一些簡單的修改就可以了。
在api的入口文件上加這兩行來出事化yar的服務(wù):
$server = new Yar_Server(new $op());
$server->handle();
$op是初始化的類名,和鳥哥的那個例子中的server端的類名是同樣的效果,不同的是因為業(yè)務(wù)需求,需要根絕請求url的參數(shù)來初始化不同的類。達(dá)到我們需要得效果。
剩下的就還剩下原來的api調(diào)用文件中的路由了。將路由去掉,可以根據(jù)映射添加一些客戶端需要得方法,例如:方法列表等等。
然后在客戶端模擬其他頻道的請求,代碼如下:
$client = new Yar_Client(“http://zjk.fh21.net/api.php?op=iask”);
$return = $client->get_sort_data();
var_dump($return);
可以正常的獲取到結(jié)果,OK,改造完成,現(xiàn)在只需要讓別的頻道稍微改一下調(diào)用方式就可以了。
ps:可能還有其他的工作要做,例如:將原來一些方法名在根絕新的功能修改等等。
后來通過反復(fù)測試發(fā)現(xiàn),接口之間的交互可以直接通過php的數(shù)組來進(jìn)行,而沒必要用Json數(shù)據(jù)。因為我們的頁面全是gbk的,所以節(jié)省了很多開發(fā)成本.
yar的基本原理就是這樣,最重要的是要把自己所用框架的基本邏輯搞清楚,只要把yar整合到自己的框架中,基本上就等于是成功了。
最后 感謝鳥哥寫出這么牛掰的東西。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/20760.html
摘要:需求在了解了前面我們關(guān)于服務(wù)治理出現(xiàn)的必要性之后。我們知道服務(wù)治理是建立在眾多服務(wù)基礎(chǔ)之上的,那么,第一步,打通這些服務(wù)是基礎(chǔ),也就是我們常說的遠(yuǎn)程調(diào)用。上面執(zhí)行遠(yuǎn)程調(diào)用也類似。 需求 在了解了前面我們關(guān)于服務(wù)治理出現(xiàn)的必要性之后。我們知道服務(wù)治理是建立在眾多服務(wù)基礎(chǔ)之上的,那么,第一步,打通這些服務(wù)是基礎(chǔ),也就是我們常說的 RPC 遠(yuǎn)程調(diào)用。要像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)器上的方法...
摘要:面向服務(wù)面向服務(wù)的基礎(chǔ)面向服務(wù)的三層應(yīng)用層,服務(wù)層,數(shù)據(jù)層應(yīng)用層用于給用戶展示,,,,安卓。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。編譯完成,提示我們已經(jīng)在下了。 面向服務(wù) 面向服務(wù)的基礎(chǔ) 面向服務(wù)的三層:應(yīng)用層,服務(wù)層,數(shù)據(jù)層 * 應(yīng)用層:用于給用戶展示,PC,H5,IOS,安卓。 * 服務(wù)層:業(yè)務(wù)邏輯,提供接口(商品,訂單,支付,用戶,物流)。 * 數(shù)據(jù)層:提供數(shù)據(jù)支持(...
摘要:客戶端并行調(diào)用這兩個服務(wù)這里的方法的命令皆以原版為準(zhǔn)則?;卣{(diào)函數(shù)需要繼承實現(xiàn)里面定義了兩個方法是針對并行調(diào)用發(fā)出之后立即執(zhí)行的任務(wù),而則是每個請求之后返回的結(jié)果。 簡介 Yar 是一個輕量級, 高效的 RPC 框架, 它提供了一種簡單方法來讓 PHP 項目之間可以互相遠(yuǎn)程調(diào)用對方的本地方法. 并且 Yar 也提供了并行調(diào)用的能力. 可以支持同時調(diào)用多個遠(yuǎn)程服務(wù)的方法.Yar 鳥哥博客介...
摘要:模擬登錄新浪微博的核心,也是與模擬登錄最大的不同,密碼加密。已經(jīng)實現(xiàn)模擬新浪微博登錄的功能,之后不再更新。 參考資料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/fly_leopard/article/details/51148904 http://www....
摘要:微博墻就是這樣的一個工具,這不是一款普通的插件,這是一款搭建在基于的插件。這是一款基于的插件,底層語言開發(fā),性能卓越。 在現(xiàn)在移動互聯(lián)網(wǎng)時代,微博已經(jīng)成為了每個人生活中必不可少的一個社交工具。而WordPress是全世界最為流行的博客系統(tǒng),把你的博客接入新浪微博,借助微博的強大用戶群,不僅能給你的網(wǎng)站提供巨大的流量,而且還能帶來不可估量價值。 WordPress微博墻就是這樣的一個工具...
閱讀 3588·2021-09-13 10:28
閱讀 1937·2021-08-10 09:43
閱讀 1010·2019-08-30 15:44
閱讀 3178·2019-08-30 13:14
閱讀 1830·2019-08-29 16:56
閱讀 2938·2019-08-29 16:35
閱讀 2843·2019-08-29 12:58
閱讀 864·2019-08-26 13:46