作者: Laruence( ) 本文地址: http://www.laruence.com/2012/09/15/2779.html 轉(zhuǎn)載請注明出處 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應(yīng)用, 一個進程, 一個請求, 天經(jīng)地義. ?然而, 當一個請求的處理中, ?涉及到多出數(shù)據(jù)源, 并且他們之間具有一定的不依賴性.
還是傳統(tǒng)的Web應(yīng)用, 一個應(yīng)用隨著業(yè)務(wù)快速增長, 開發(fā)人員的流轉(zhuǎn), 就會慢慢的進入一個惡性循環(huán), ?代碼量上只有加法沒有了減法. ?因為隨著系統(tǒng)變復雜, 牽一發(fā)就會動全局, ?而新來的維護者, 對原有的體系并沒有那么多時間給他讓他全面掌握. 即使有這么多時間, 要想掌握以前那么多的維護者的思維的結(jié)合, 也不是一件容易的事情…
那么, 長次以往, 這個系統(tǒng)將會越來越不可維護…. ?到一個大型應(yīng)用進入這個惡性循環(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請求這個接口地址的話, 我們就會看到如下的信息頁面:
這樣, 我們可以在注釋中,把接口的信息標注好, 就可以讓文檔和接口在一起了.
而對于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)用.
這里還有一個細節(jié), Yar見縫插針的不會浪費任何時間, 在這些請求發(fā)送完成以后, Yar會調(diào)用一次callback, 和普通的請求返回回調(diào)不同, 這次的調(diào)用的$callinfo參數(shù)為空.
這樣一來, 我們就可以先發(fā)送請求, 然后再第一次回調(diào), 繼續(xù)做我們當前進程的工作, 等所有工作結(jié)束以后, 再交給Yar去獲取并行RPC的響應(yīng).
<?php function callback($retval, $callinfo) { if ($callinfo == NULL) { //做本地的邏輯 return TRUE; } //RPC請求返回, 返回值在$retval }
有了這些, 我們就可以把一個Web應(yīng)用中, 多個數(shù)據(jù)源并行處理, 從而也能把這些邏輯解耦, 分開部署…
當然Yar目前還在試用階段, 所以還沒有發(fā)布任何一個包(Yar at PECL), ?但是有興趣的同學可以現(xiàn)在就把代碼clone下去試用哦(雖然沒有正式投入試用, 不過已經(jīng)經(jīng)過了驗證).
Yar: Yar at Github
PS, 如果要使用Msgpack(一個高效的二進制打包協(xié)議)做為打包協(xié)議, 需要單獨安裝Msgpack擴展(Msgpack), 這個擴展目前也是我在維護, 我會在近幾天把他在PECL上發(fā)布, 盡請期待.

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'évaluation du rapport co?t/performance du support commercial pour un framework Java implique les étapes suivantes : Déterminer le niveau d'assurance requis et les garanties de l'accord de niveau de service (SLA). L’expérience et l’expertise de l’équipe d’appui à la recherche. Envisagez des services supplémentaires tels que les mises à niveau, le dépannage et l'optimisation des performances. évaluez les co?ts de support commercial par rapport à l’atténuation des risques et à une efficacité accrue.

La courbe d'apprentissage d'un framework PHP dépend de la ma?trise du langage, de la complexité du framework, de la qualité de la documentation et du support de la communauté. La courbe d'apprentissage des frameworks PHP est plus élevée par rapport aux frameworks Python et inférieure par rapport aux frameworks Ruby. Par rapport aux frameworks Java, les frameworks PHP ont une courbe d'apprentissage modérée mais un temps de démarrage plus court.

Le framework PHP léger améliore les performances des applications grace à une petite taille et une faible consommation de ressources. Ses fonctionnalités incluent : une petite taille, un démarrage rapide, une faible utilisation de la mémoire, une vitesse de réponse et un débit améliorés et une consommation de ressources réduite. Cas pratique : SlimFramework crée une API REST, seulement 500 Ko, une réactivité élevée et un débit élevé.

Feuille de route d'apprentissage du framework Java pour différents domaines : Développement Web : SpringBoot et PlayFramework. Couche de persistance?: Hibernate et JPA. Programmation réactive c?té serveur : ReactorCore et SpringWebFlux. Informatique temps réel : ApacheStorm et ApacheSpark. Cloud computing?: AWS SDK pour Java et Google Cloud Java.

La rédaction d'une documentation claire et complète est cruciale pour le framework Golang. Les meilleures pratiques incluent le respect d'un style de documentation établi, tel que le Go Coding Style Guide de Google. Utilisez une structure organisationnelle claire, comprenant des titres, des sous-titres et des listes, et fournissez la navigation. Fournit des informations complètes et précises, notamment des guides de démarrage, des références API et des concepts. Utilisez des exemples de code pour illustrer les concepts et l'utilisation. Maintenez la documentation à jour, suivez les modifications et documentez les nouvelles fonctionnalités. Fournir une assistance et des ressources communautaires telles que des problèmes et des forums GitHub. Créez des exemples pratiques, tels que la documentation API.

Choisissez le meilleur framework Go en fonction des scénarios d'application?: tenez compte du type d'application, des fonctionnalités du langage, des exigences de performances et de l'écosystème. Frameworks Go courants : Gin (application Web), Echo (service Web), Fibre (haut débit), gorm (ORM), fasthttp (vitesse). Cas pratique : construction de l'API REST (Fiber) et interaction avec la base de données (gorm). Choisissez un framework?: choisissez fasthttp pour les performances clés, Gin/Echo pour les applications Web flexibles et gorm pour l'interaction avec la base de données.

Il existe cinq malentendus dans l'apprentissage du framework Go?: une dépendance excessive à l'égard du framework et une flexibilité limitée. Si vous ne respectez pas les conventions du framework, le code sera difficile à maintenir. L'utilisation de bibliothèques obsolètes peut entra?ner des problèmes de sécurité et de compatibilité. L'utilisation excessive de packages obscurcit la structure du code. Ignorer la gestion des erreurs entra?ne un comportement inattendu et des plantages.

Problèmes courants d'échec du framework Java?:?échec du pool de connexions?: augmentez la taille du pool de connexions ou utilisez des outils de surveillance pour résoudre les problèmes d'épuisement du pool de connexions. Exception de chargement paresseux Hibernate?: initialisez explicitement les entités de chargement paresseux avant de les utiliser. Erreurs de mappage JSON?: vérifiez l'exactitude du type de données et du format JSON. Problèmes de configuration des filtres et des intercepteurs?: vérifiez à nouveau la configuration pour vous assurer qu'elle fonctionne comme prévu.
