成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

并行的RPC框架

開發 后端
Yar(yet another RPC framework, 教主問我為啥都是Ya打頭, 呵呵, 因為這樣名字好起)是我在3個多月前, 為了解決一個實際的問題, 而開發的一個PHP擴展的, RPC框架。

Yar(yet another RPC framework, 教主問我為啥都是Ya打頭, 呵呵, 因為這樣名字好起)是我在3個多月前, 為了解決一個實際的問題, 而開發的一個PHP擴展的, RPC框架, 和現有的RPC框架(xml-rpc, soap)不同, 這是一個輕量級的框架, 支持多種打包協議(msgpack, json, php), 并且最重要的一個特點是, 它是可并行化的..

考慮如下的場景:

傳統的Web應用, 一個進程, 一個請求, 天經地義. 然而, 當一個請求的處理中, 涉及到多出數據源, 并且他們之間具有一定的不依賴性.

還是傳統的Web應用, 一個應用隨著業務快速增長, 開發人員的流轉, 就會慢慢的進入一個惡性循環, 代碼量上只有加法沒有了減法. 因為隨著系統變復雜, 牽一發就會動全局, 而新來的維護者, 對原有的體系并沒有那么多時間給他讓他全面掌握. 即使有這么多時間, 要想掌握以前那么多的維護者的思維的結合, 也不是一件容易的事情…

那么, 長次以往, 這個系統將會越來越不可維護…. 到一個大型應用進入這個惡性循環, 那么等待他的只有重構了.

那么, 能不能對這個系統做解耦呢?

我們已經做了很多解耦了, 數據, 中間件, 業務, 邏輯, 等等, 各種分層. 但到Web應用這塊, 還能怎么分呢, MVC我們已經做過了….

基于此, Yar或許能解決你遇到的這倆個問題…

Yar是一個非常輕量級的RPC框架, 我在實現Yar的時候, 追求了極致的輕量級, 它使用非常簡單, 對于Server端:

  1. <?php  
  2. class API {  
  3.     /**  
  4. * the doc info will be generated automatically into service info page.  
  5. * @params  
  6. * @return  
  7. */ 
  8.     public function api($parameter$option = "foo") {  
  9.     }  
  10.    
  11.     protected function client_can_not_see() {  
  12.     }  
  13. }  
  14.    
  15. $service = new Yar_Server(new API());  
  16. $service->handle();  
  17. ?>  

和Soap使用方法很相像吧? 是的, 就這樣, 你的API類就可以對外提供服務了..

Yar為了方便開發, 把文檔和接口綁定到了一起, 對于上面的例子, 如果我們是簡單的GET請求這個接口地址的話, 我們就會看到如下的信息頁面:

這樣, 我們可以在注釋中,把接口的信息標注好, 就可以讓文檔和接口在一起了.

而對于Client端來說, 簡單的串行調用, 會非常之簡單:

  1. <?php  
  2. $client = new Yar_Client("http://host/api/");  
  3. $result = $client->api("parameter);  
  4. ?>  

這樣一來, 如果你有多個服務, 你只需要一個client.

那么, 最激動人心的并行化調用呢?

  1. <?php  
  2. function callback($retval$callinfo) {  
  3.      var_dump($retval);  
  4. }     
  5. Yar_Concurrent_Client::call("http://host/api/""api"array("parameters"), "callback");  
  6. Yar_Concurrent_Client::call("http://host/api/""api"array("parameters"), "callback");  
  7. Yar_Concurrent_Client::call("http://host/api/""api"array("parameters"), "callback");  
  8. Yar_Concurrent_Client::call("http://host/api/""api"array("parameters"), "callback");  
  9. Yar_Concurrent_Client::loop(); //send  
  10. ?>  

這樣, 所有的請求會一次發出, 只要有任何一個請求完成, 回調函數”callback”就會被立即調用.

這里還有一個細節, Yar見縫插針的不會浪費任何時間, 在這些請求發送完成以后, Yar會調用一次callback, 和普通的請求返回回調不同, 這次的調用的$callinfo參數為空.

這樣一來, 我們就可以先發送請求, 然后再第一次回調, 繼續做我們當前進程的工作, 等所有工作結束以后, 再交給Yar去獲取并行RPC的響應.

  1. <?php  
  2. function callback($retval$callinfo) {  
  3.     if ($callinfo == NULL) {  
  4.        //做本地的邏輯  
  5.        return TRUE;  
  6.     }     
  7.      //RPC請求返回, 返回值在$retval  
  8. }  

有了這些, 我們就可以把一個Web應用中, 多個數據源并行處理, 從而也能把這些邏輯解耦, 分開部署…

當然Yar目前還在試用階段, 所以還沒有發布任何一個包(Yar at PECL), 但是有興趣的同學可以現在就把代碼clone下去試用哦(雖然沒有正式投入試用, 不過已經經過了驗證).

Yar: Yar at Github

原文鏈接:http://www.laruence.com/2012/09/15/2779.html

責任編輯:張偉 來源: Laruence的博客
相關推薦

2022-10-20 23:15:10

PostgreSQL算法機制

2022-01-07 06:12:08

RPC框架限流

2011-02-17 09:45:40

云計算RPC框架

2022-08-15 08:01:35

微服務框架RPC

2022-01-10 17:18:26

框架 RPC架構

2022-02-14 21:17:21

RPC框架協議

2013-07-09 09:20:23

JPPFJava并行處理框架

2012-02-01 09:28:02

Java

2023-03-06 07:28:57

RPC框架序列化

2023-01-18 08:32:13

2012-08-17 09:32:52

Python

2020-11-02 08:19:18

RPC框架Java

2020-10-20 17:35:42

srpcRPC語言

2022-03-01 11:38:51

RPC框架后端

2019-08-21 08:44:52

RPC框架Java

2021-01-19 09:19:33

RPC調用過程框架

2021-04-21 08:01:31

Googleprotobuf嵌入式系統

2021-03-04 15:48:05

微服務語言開源

2011-12-20 09:51:01

Java

2024-01-02 12:17:44

Go傳統遠程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线1区 | 日日碰狠狠躁久久躁婷婷 | 精品无码久久久久久久动漫 | 日韩a在线观看 | 午夜爽爽男女免费观看hd | 一级毛片大全免费播放 | 中文字幕av网站 | 国产精品久久久久久久免费大片 | 不卡一区二区在线观看 | 日韩区| 国产精品福利在线 | 国产真实乱全部视频 | 欧美日韩一区二区三区不卡视频 | 成人毛片一区二区三区 | 99久9 | 欧美一级免费看 | 久久久久久久久久久高潮一区二区 | 欧美一级黄视频 | av在线亚洲天堂 | 中文字幕第十一页 | 91久久| 黑人成人网 | 一区二区三 | 一区二区三区视频在线观看 | 久久久www成人免费无遮挡大片 | 欧美一区二区三区久久精品 | 亚洲精品视频导航 | 麻豆国产一区二区三区四区 | 精品久久久久久亚洲综合网 | 成人在线免费网站 | 人人性人人性碰国产 | h网站在线观看 | 夜夜骑首页 | 古装三级在线播放 | 国产精品高 | 国精日本亚洲欧州国产中文久久 | 成人区一区二区三区 | 国产97在线 | 日韩 | 亚洲久久久 | 亚洲高清av在线 | 91精品国产色综合久久不卡98口 |