国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 php手冊 Yar – 并行的RPC框架(Concurrent RPC framework)

Yar – 并行的RPC框架(Concurrent RPC framework)

May 23, 2018 pm 02:53 PM
concurrent frame rpc 框架

作者: Laruence( ) 本文地址: http://www.laruence.com/2012/09/15/2779.html 轉(zhuǎn)載請注明出處 Yar(yet another RPC framework, 教主問我為啥都是Ya打頭, 呵呵, 因為這樣名字好起)是我在3個多月前, 為了解決一個實際的問題, 而開發(fā)的一個PHP擴(kuò)展的, RPC框架,

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

考慮如下的場景:

傳統(tǒng)的Web應(yīng)用, 一個進(jìn)程, 一個請求, 天經(jīng)地義. ?然而, 當(dāng)一個請求的處理中, ?涉及到多出數(shù)據(jù)源, 并且他們之間具有一定的不依賴性.

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

那么, 長次以往, 這個系統(tǒng)將會越來越不可維護(hù)…. ?到一個大型應(yīng)用進(jìn)入這個惡性循環(huán), 那么等待他的只有重構(gòu)了.

那么, 能不能對這個系統(tǒng)做解耦呢?

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

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

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

<?php
class 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();
?>

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

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

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

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

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

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

那么, 最激動人心的并行化調(diào)用呢?

<?php
function callback($retval, $callinfo) {
     var_dump($retval);
}

Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::loop(); //send
?>

這樣, 所有的請求會一次發(fā)出, 只要有任何一個請求完成, 回調(diào)函數(shù)”callback”就會被立即調(diào)用.

這里還有一個細(xì)節(jié), Yar見縫插針的不會浪費(fèi)任何時間, 在這些請求發(fā)送完成以后, Yar會調(diào)用一次callback, 和普通的請求返回回調(diào)不同, 這次的調(diào)用的$callinfo參數(shù)為空.

這樣一來, 我們就可以先發(fā)送請求, 然后再第一次回調(diào), 繼續(xù)做我們當(dāng)前進(jìn)程的工作, 等所有工作結(jié)束以后, 再交給Yar去獲取并行RPC的響應(yīng).

<?php
function callback($retval, $callinfo) {
    if ($callinfo == NULL) {
       //做本地的邏輯
       return TRUE;
    }

     //RPC請求返回, 返回值在$retval
}

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

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

Yar: Yar at Github

PS, 如果要使用Msgpack(一個高效的二進(jìn)制打包協(xié)議)做為打包協(xié)議, 需要單獨安裝Msgpack擴(kuò)展(Msgpack), 這個擴(kuò)展目前也是我在維護(hù), 我會在近幾天把他在PECL上發(fā)布, 盡請期待.

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何評估Java框架商業(yè)支持的性價比 如何評估Java框架商業(yè)支持的性價比 Jun 05, 2024 pm 05:25 PM

評估Java框架商業(yè)支持的性價比涉及以下步驟:確定所需的保障級別和服務(wù)水平協(xié)議(SLA)保證。研究支持團(tuán)隊的經(jīng)驗和專業(yè)知識??紤]附加服務(wù),如升級、故障排除和性能優(yōu)化。權(quán)衡商業(yè)支持成本與風(fēng)險緩解和提高效率。

PHP 框架的學(xué)習(xí)曲線與其他語言框架相比如何? PHP 框架的學(xué)習(xí)曲線與其他語言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的學(xué)習(xí)曲線取決于語言熟練度、框架復(fù)雜性、文檔質(zhì)量和社區(qū)支持。與Python框架相比,PHP框架的學(xué)習(xí)曲線更高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學(xué)習(xí)曲線中等,但入門時間較短。

PHP 框架的輕量級選項如何影響應(yīng)用程序性能? PHP 框架的輕量級選項如何影響應(yīng)用程序性能? Jun 06, 2024 am 10:53 AM

輕量級PHP框架通過小體積和低資源消耗提升應(yīng)用程序性能。其特點包括:體積小,啟動快,內(nèi)存占用低提升響應(yīng)速度和吞吐量,降低資源消耗實戰(zhàn)案例:SlimFramework創(chuàng)建RESTAPI,僅500KB,高響應(yīng)性、高吞吐量

Java框架學(xué)習(xí)路線圖:不同領(lǐng)域中的最佳實踐 Java框架學(xué)習(xí)路線圖:不同領(lǐng)域中的最佳實踐 Jun 05, 2024 pm 08:53 PM

針對不同領(lǐng)域的Java框架學(xué)習(xí)路線圖:Web開發(fā):SpringBoot和PlayFramework。持久層:Hibernate和JPA。服務(wù)端響應(yīng)式編程:ReactorCore和SpringWebFlux。實時計算:ApacheStorm和ApacheSpark。云計算:AWSSDKforJava和GoogleCloudJava。

golang框架文檔最佳實踐 golang框架文檔最佳實踐 Jun 04, 2024 pm 05:00 PM

編寫清晰全面的文檔對于Golang框架至關(guān)重要。最佳實踐包括:遵循既定文檔風(fēng)格,例如Google的Go編碼風(fēng)格指南。使用清晰的組織結(jié)構(gòu),包括標(biāo)題、子標(biāo)題和列表,并提供導(dǎo)航。提供全面準(zhǔn)確的信息,包括入門指南、API參考和概念。使用代碼示例說明概念和使用方法。保持文檔更新,跟蹤更改并記錄新功能。提供支持和社區(qū)資源,例如GitHub問題和論壇。創(chuàng)建實際案例,如API文檔。

如何為不同的應(yīng)用場景選擇最佳的golang框架 如何為不同的應(yīng)用場景選擇最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根據(jù)應(yīng)用場景選擇最佳Go框架:考慮應(yīng)用類型、語言特性、性能需求、生態(tài)系統(tǒng)。常見Go框架:Gin(Web應(yīng)用)、Echo(Web服務(wù))、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。實戰(zhàn)案例:構(gòu)建RESTAPI(Fiber),與數(shù)據(jù)庫交互(gorm)。選擇框架:性能關(guān)鍵選fasthttp,靈活Web應(yīng)用選Gin/Echo,數(shù)據(jù)庫交互選gorm。

Golang框架學(xué)習(xí)過程中常見的誤區(qū)有哪些? Golang框架學(xué)習(xí)過程中常見的誤區(qū)有哪些? Jun 05, 2024 pm 09:59 PM

Go框架學(xué)習(xí)的誤區(qū)有以下5種:過度依賴框架,限制靈活性。不遵循框架約定,代碼難維護(hù)。使用過時庫,帶來安全和兼容性問題。過度使用包,混淆代碼結(jié)構(gòu)。忽視錯誤處理,導(dǎo)致意外行為和崩潰。

揭秘Java框架的常見故障疑慮 揭秘Java框架的常見故障疑慮 Jun 05, 2024 pm 09:37 PM

常見Java框架故障疑慮:連接池故障:增加連接池大小或使用監(jiān)視工具解決連接池耗盡問題。Hibernate惰性加載異常:在使用惰性加載實體前明確初始化它們。JSON映射錯誤:驗證數(shù)據(jù)類型和JSON格式的正確性。過濾器和攔截器配置問題:仔細(xì)檢查配置,確保預(yù)期工作方式。

See all articles