亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 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 轉載請注明出處 Yar(yet another RPC framework, 教主問我為啥都是Ya打頭, 呵呵, 因為這樣名字好起)是我在3個多月前, 為了解決一個實際的問題, 而開發(fā)的一個PHP擴展的, RPC框架,

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

考慮如下的場景:

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

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

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

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

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

基于此, 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類就可以對外提供服務了..

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

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

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

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

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

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

<?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ā)出, 只要有任何一個請求完成, 回調函數(shù)”callback”就會被立即調用.

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

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

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

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

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

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

Yar: Yar at Github

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

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

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

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

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

PHP 框架的輕量級選項如何影響應用程式效能? PHP 框架的輕量級選項如何影響應用程式效能? Jun 06, 2024 am 10:53 AM

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

Java框架學習路線圖:不同領域中的最佳實踐 Java框架學習路線圖:不同領域中的最佳實踐 Jun 05, 2024 pm 08:53 PM

針對不同領域的Java框架學習路線圖:Web開發(fā):SpringBoot和PlayFramework。持久層:Hibernate和JPA。服務端響應式程式設計:ReactorCore和SpringWebFlux。即時計算:ApacheStorm和ApacheSpark。雲端運算:AWSSDKforJava和GoogleCloudJava。

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

編寫清晰全面的文件對於Golang框架至關重要。最佳實踐包括:遵循既定文件風格,例如Google的Go程式設計風格指南。使用清晰的組織結構,包括標題、子標題和列表,並提供導覽。提供全面且準確的信息,包括入門指南、API參考和概念。使用程式碼範例說明概念和使用方法。保持文件更新,追蹤變更並記錄新功能。提供支援和社群資源,例如GitHub問題和論壇。建立實際案例,如API文件。

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

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

Golang框架學習過程中常見的迷思有哪些? Golang框架學習過程中常見的迷思有哪些? Jun 05, 2024 pm 09:59 PM

Go框架學習的迷思有以下5種:過度依賴框架,限制彈性。不遵循框架約定,程式碼難以維護。使用過時庫,帶來安全和相容性問題。過度使用包,混淆程式碼結構。忽視錯誤處理,導致意外行為和崩潰。

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

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

See all articles