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

首頁(yè) php教程 php手冊(cè) 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)載請(qǐng)注明出處 Yar(yet another RPC framework, 教主問(wèn)我為啥都是Ya打頭, 呵呵, 因?yàn)檫@樣名字好起)是我在3個(gè)多月前, 為了解決一個(gè)實(shí)際的問(wèn)題, 而開(kāi)發(fā)的一個(gè)PHP擴(kuò)展的, RPC框架,

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

考慮如下的場(chǎng)景:

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

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

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

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

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

基于此, Yar或許能解決你遇到的這倆個(gè)問(wèn)題…

Yar是一個(gè)非常輕量級(jí)的RPC框架, 我在實(shí)現(xiàn)Yar的時(shí)候, 追求了極致的輕量級(jí), 它使用非常簡(jiǎn)單, 對(duì)于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類就可以對(duì)外提供服務(wù)了..

Yar為了方便開(kāi)發(fā), 把文檔和接口綁定到了一起, 對(duì)于上面的例子, 如果我們是簡(jiǎn)單的GET請(qǐng)求這個(gè)接口地址的話, 我們就會(huì)看到如下的信息頁(yè)面:

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

而對(duì)于Client端來(lái)說(shuō), 簡(jiǎn)單的串行調(diào)用, 會(huì)非常之簡(jiǎn)單:

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

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

那么, 最激動(dòng)人心的并行化調(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
?>

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

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

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

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

     //RPC請(qǐng)求返回, 返回值在$retval
}

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

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

Yar: Yar at Github

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

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整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

如何評(píng)估Java框架商業(yè)支援的性價(jià)比 如何評(píng)估Java框架商業(yè)支援的性價(jià)比 Jun 05, 2024 pm 05:25 PM

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

Java框架的效能比較 Java框架的效能比較 Jun 04, 2024 pm 03:56 PM

根據(jù)基準(zhǔn)測(cè)試,對(duì)於小型、高效能應(yīng)用程序,Quarkus(快速啟動(dòng)、低記憶體)或Micronaut(TechEmpower優(yōu)異)是理想選擇。 SpringBoot適用於大型、全端應(yīng)用程序,但啟動(dòng)時(shí)間和記憶體佔(zhàn)用稍慢。

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

PHP框架的學(xué)習(xí)曲線取決於語(yǔ)言熟練度、框架複雜性、文件品質(zhì)和社群支援。與Python框架相比,PHP框架的學(xué)習(xí)曲線較高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學(xué)習(xí)曲線中等,但入門時(shí)間較短。

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

輕量級(jí)PHP框架透過(guò)小體積和低資源消耗提升應(yīng)用程式效能。其特點(diǎn)包括:體積小,啟動(dòng)快,記憶體佔(zhàn)用低提升響應(yīng)速度和吞吐量,降低資源消耗實(shí)戰(zhàn)案例:SlimFramework創(chuàng)建RESTAPI,僅500KB,高響應(yīng)性、高吞吐量

golang框架文件最佳實(shí)踐 golang框架文件最佳實(shí)踐 Jun 04, 2024 pm 05:00 PM

編寫清晰全面的文件對(duì)於Golang框架至關(guān)重要。最佳實(shí)踐包括:遵循既定文件風(fēng)格,例如Google的Go程式設(shè)計(jì)風(fēng)格指南。使用清晰的組織結(jié)構(gòu),包括標(biāo)題、子標(biāo)題和列表,並提供導(dǎo)覽。提供全面且準(zhǔn)確的信息,包括入門指南、API參考和概念。使用程式碼範(fàn)例說(shuō)明概念和使用方法。保持文件更新,追蹤變更並記錄新功能。提供支援和社群資源,例如GitHub問(wèn)題和論壇。建立實(shí)際案例,如API文件。

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

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

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

針對(duì)不同領(lǐng)域的Java框架學(xué)習(xí)路線圖:Web開(kāi)發(fā):SpringBoot和PlayFramework。持久層:Hibernate和JPA。服務(wù)端響應(yīng)式程式設(shè)計(jì):ReactorCore和SpringWebFlux。即時(shí)計(jì)算:ApacheStorm和ApacheSpark。雲(yún)端運(yùn)算:AWSSDKforJava和GoogleCloudJava。

Golang框架學(xué)習(xí)過(guò)程中常見(jiàn)的迷思有哪些? Golang框架學(xué)習(xí)過(guò)程中常見(jiàn)的迷思有哪些? Jun 05, 2024 pm 09:59 PM

Go框架學(xué)習(xí)的迷思有以下5種:過(guò)度依賴框架,限制彈性。不遵循框架約定,程式碼難以維護(hù)。使用過(guò)時(shí)庫(kù),帶來(lái)安全和相容性問(wèn)題。過(guò)度使用包,混淆程式碼結(jié)構(gòu)。忽視錯(cuò)誤處理,導(dǎo)致意外行為和崩潰。

See all articles