Press "Enter" to skip to content

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

Yar(yet another RPC framework, 教主问我为啥都是Ya打头, 呵呵, 因为这样名字好起)是我在3个多月前, 为了解决一个实际的问题, 而开发的一个PHP扩展的, RPC框架, 和现有的RPC框架(xml-rpc, soap)不同, 这是一个轻量级的框架, 支持多种打包协议(msgpack, json, php), 并且最重要的一个特点是, 它是可并行化的..

考虑如下的场景:

传统的Web应用, 一个进程, 一个请求, 天经地义. 然而, 当一个请求的处理中, 涉及到多出数据源, 并且他们之间具有一定的不依赖性.

还是传统的Web应用, 一个应用随着业务快速增长, 开发人员的流转, 就会慢慢的进入一个恶性循环, 代码量上只有加法没有了减法. 因为随着系统变复杂, 牵一发就会动全局, 而新来的维护者, 对原有的体系并没有那么多时间给他让他全面掌握. 即使有这么多时间, 要想掌握以前那么多的维护者的思维的结合, 也不是一件容易的事情...

那么, 长此以往, 这个系统将会越来越不可维护.... 到一个大型应用进入这个恶性循环, 那么等待他的只有重构了.

那么, 能不能对这个系统做解耦呢?

我们已经做了很多解耦了, 数据, 中间件, 业务, 逻辑, 等等, 各种分层. 但到Web应用这块, 还能怎么分呢, MVC我们已经做过了....

基于此, Yar或许能解决你遇到的这俩个问题...

Yar是一个非常轻量级的RPC框架, 我在实现Yar的时候, 追求了极致的轻量级, 它使用非常简单, 假设你有一个名字叫做API的类,需要对外提供服务:

<?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() {
    }
}

引入Yar只需要简单的:

<?php
require "api.php";

$service = new Yar_Server(new API());
$service->handle();
?>

和Soap使用方法很相像吧? 是的, 就这样, 你的API类就可以对外提供服务了..

Yar为了方便开发, 把文档和接口绑定到了一起, 对于上面的例子, 如果我们是简单的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
?>

这样, 所有的请求会一次发出, 只要有任何一个请求完成, 回调函数"callback"就会被立即调用.

这里还有一个细节, Yar见缝插针的不会浪费任何时间, 在这些请求发送完成以后, Yar会调用一次callback, 和普通的请求返回回调不同, 这次的调用的$callinfo参数为空.

这样一来, 我们就可以先发送请求, 然后再第一次回调, 继续做我们当前进程的工作, 等所有工作结束以后, 再交给Yar去获取并行RPC的响应.

<?php
function callback($retval, $callinfo) {
    if ($callinfo == NULL) {
       //做本地的逻辑
       return TRUE;
    }
     //RPC请求返回, 返回值在$retval
}

有了这些, 我们就可以把一个Web应用中, 多个数据源并行处理, 从而也能把这些逻辑解耦, 分开部署...

附上一些链接:
PECL安装包: Yar At PECL
使用说明(Github Readme): Yar at Github
PS, 如果要使用Msgpack(一个高效的二进制打包协议)做为打包协议, 需要单独安装Msgpack扩展(Msgpack).

84 Comments

  1. pjp
    pjp September 26, 2022

    报错 server info is not allowed to access 是什么原因啊

  2. wangyu
    wangyu December 10, 2020

    如果不支持epoll是无法并行的,等于是windows不支持并行

  3. 111111
    111111 August 15, 2019

    感觉这个跟curl没啥区别的样子

  4. chen
    chen August 15, 2019

    这个是基于http的rpc么

  5. kevinfei
    kevinfei August 6, 2019

    尊敬的偶像鸟哥,您好!
    我想问您一下,关于yar和swool这个2个框架实际的项目开发中那个会更好(前后端分离),他两之间的区别是否很大?谁的速度更快?那个的内存消耗会更小一些

    • kevinfei
      kevinfei August 6, 2019

      主要就是RPC

  6. Goldenslot
    Goldenslot July 18, 2019

    This content is good, very interesting. Thank you for this great story.

  7. MrChen
    MrChen July 3, 2019

    鸟哥厉害了

  8. song
    song April 12, 2019

    倘若想在服务端做统一日志记录,请求方法,参数等信息怎么取呢?
    通过方法体本身赋值全局变量的方式有点弱啊

  9. kaizi
    kaizi March 27, 2019

    在php.ini中添加msgpack.error_display=Off

  10. joshua
    joshua February 27, 2019

    鸟哥:
    PHP 7.2.2
    msgpack:
    MessagePack Support => enabled
    Session Support => enabled
    extension Version => 2.0.2
    header Version => 0.5.4
    报错信息:
    [msgpack] (php_msgpack_unserialize) Extra bytes in xxx

  11. dagang007
    dagang007 December 5, 2018

    Is there a dll file ,my dear?

  12. dagang007
    dagang007 December 5, 2018

    楼主能提供用于window server的dll吗

  13. Bruce
    Bruce August 23, 2018

    现在遇到类似问题,来学习学习!

  14. Anonymous
    Anonymous May 15, 2018

    handle();
    ?>
    hello(“parameter”);
    print_r($result);
    ?>

  15. Anonymous
    Anonymous May 15, 2018

    API 类 api方法有冲突啊
    不能是一样的

    • Shirne
      Shirne January 25, 2019

      加个空的__construct 就可以了

  16. shenhaofang
    shenhaofang April 3, 2018

    yar 并发会占用连接数吗?

  17. albert
    albert May 9, 2017

    鸟哥,我想问就是,这个框架好像没有进行验证。那如果api地址被人家知道了。不就可以造成恶意请求了吗。

  18. Abner27
    Abner27 April 6, 2017

    这个直接的curl api有啥区别吗? 网络开销会不会成为一个瓶颈,curl是存在这个问题的

    • smilewind
      smilewind March 18, 2019

      一般RPC采用的协议是 tcp 吧 , curl 是 http

  19. […] 当安装完毕以后我们就可以通过该扩展访问远程服务的目的了 。 二、Yar 使用方法 我们可以在PHP官方手册中找到使用方法也可以访问风雪之隅 的博客中获取帮助。 […]

  20. 逆袭皇帝
    逆袭皇帝 December 13, 2016

    PHP Warning: Yar_Concurrent_Client::loop(): can not get fd from curl instance in【解决方案:你把URL里的localhost换成你的IP 127.0.0.1试一下】

  21. Gavin
    Gavin December 9, 2016

    请问怎样去掉 msgpack 里面的警告提示?除了设置php的警告级别,如这些:
    Warning: [msgpack] (php_msgpack_unserialize) Extra bytes in

  22. zysafe
    zysafe September 24, 2016

    鸟哥: 执行报错 没有第二次回调 报错内容
    Warning: Yar_Concurrent_Client::loop(): can not get fd from curl instance in

  23. zzc
    zzc September 6, 2016

    如果我先注册了一些请求,loop ,又注册了一些请求,再loop,会发生什么?观察到的情况好像是第二次的loop还会继续发送第一的请求

  24. 华尔街·地毯
    华尔街·地毯 August 18, 2016

    mac下我拉了主干的,发现第一次callback没有了= =

  25. 华尔街·地毯
    华尔街·地毯 August 18, 2016

    鸟哥你好,我用了你的并行之后好像没有第二次的callback,而且还报了这样一个warning,不知道是啥原因
    PHP Warning: Yar_Concurrent_Client::loop(): can not get fd from curl instance in

  26. balck
    balck August 17, 2016

    API 类 api方法有冲突

  27. ewww
    ewww August 12, 2016

    qqqqqqqqqqqqqqqq

  28. gao
    gao August 12, 2016

    鸟哥:
    指定msgpack时就会报这个错误
    PHP Fatal error: Yar_Client::__call(): unsupported packager msgpack
    但是msgpack的扩展已经装了
    php -i | grep msgpack
    /xxx/conf/php7/msgpack.ini,
    msgpack
    msgpack.error_display => On => On
    msgpack.illegal_key_insert => Off => Off
    msgpack.php_only => On => On
    msgpack.use_str8_serialization => On => On
    请问怎么解决?多谢~

  29. Li
    Li June 5, 2016

    $client = new Yar_Client(“http://host/api/”);
    $result = $client->api(“parameter);
    最后少了个”

  30. kevin
    kevin May 12, 2016

    鸟哥:
    php7的yar2.0.0版本,GET请求服务端的时候接口注释显示不出来
    看源码是
    spprintf(&buf, 0, HTML_MARKUP_ENTRY, prototype, doc_comment? doc_comment : “”);
    这行的doc_comment为空,不知道什么原因,希望看到了帮回复下,感谢。

  31. 奶牛先生
    奶牛先生 May 10, 2016

    php_yar-2.0.0-7.0-ts-vc14-x86 这个加载php_yar.dll失败,为什么?

  32. silverstar
    silverstar March 22, 2016

    If I acquiree a mⲟneʏ Ƅᥙгѕt thrοᥙgҺ, at alⅼ ɑге mʏ геsρߋnsіƄiⅼіtiеѕ?
    Ꮪߋmе “purchases” mɑⅾᥱ wіtһ a bɑnk
    cагɗ օf tɦings ᴡhіcҺ can Ƅе соbѕіԁегed aѕ caѕҺ аге ɑlѕο thߋսǥɦt-aƄоᥙt
    tо աatcɦ νег сaѕҺ ɑⅾνancеѕ аhcогɗɑncе ᴡitɦ tɦе bаnk carԁ
    netաօгқ’ѕ
    рoіntегѕ, tҺerᥱЬʏ іnsіɗесսгrϲⲟntaіneⅾ Ƅʏɡ
    tһе uⲣρeг іntегeѕt гatᥱ and tɦᥱ ⅾеaггtһ ߋf tҺe flеⲭіƄіⅼіty
    pᥱгіоԀ. ТҺеѕе ߋftеn sսrгⲟսndеd Ƅүϲⅼսⅾеmⲟneʏ οгԀᥱгѕ ,
    lоttегүtіскᥱtѕ,ցɑmcontaіned Ьүɡ ϲɦiρѕ , аnd сᥱгtaіn tօlⅼ ɑnd сɦагǥes tо suге
    ցօѵᥱrnmᥱntѕ.
    nonetɦeⅼеѕs, օսɡһt tߋ tһᥱ
    mегchant not lеt ԁгоρ thе ρгecіѕе ѕκіn tοne
    ⲟf thɦe tгɑnsactіοns, tһesе ԝіⅼl ρгоƄaƅⅼү Ье ρrοсᥱѕѕᥱⅾ
    аѕ гegular ƅank
    caгⅾ tгаnsactiօns.
    ѵaгiοуѕ ѕᥱrνісе ρгߋѵіɗегѕ bгеaҝfast hаndⅾd օn tҺᥱ сгеdit caгd ρгⲟcеѕѕcοntɑineԀ bуǥ cҺагǥеѕ
    to tҺe cгеⅾіt ϲaгd ɦօⅼⅾегѕ in spіte
    οf the ƅаnk caгɗ netᴡогκ’s ɡᥙіdeⅼіneѕ, ᴡҺκсһ ѕtatе tҺе сгеdіt cагԁ ҺоlԀегs ѕɦοuսⅼԀ haνе no ɑԁɗіtiоnal feе fог ɗօіnsіԀᥱɡ
    a tгаnsaсtіοn Ƅy a Ƅank cагԁ.
    Undег сarɗ cοnspіге ցᥙіɗеⅼіneѕ, a bank ϲɑгɗ Һⲟlԁeг ⲣгᥱѕеnting an аǥгеᥱԁ foгm оf tгɑԀᥱ namе mᥙѕt ƅᥱ iѕѕսeɗ ɑ mοneу Ƅггеacһ оνeг-tɦe-ϲοᥙnter ɑt any financiaⅼ іnstіtutіοn աhiiϲҺ ροіntѕ tɦat tyре of
    ƅаnk cɑrd, еᴠееn іf tɦе ϲагⅾроѕѕᥱѕѕⲟг ϲɑn’t еmⲣlοʏее һіs ⲟr heгPӀΝ .
    Υߋu mаү sеttⅼe ᥙp indіᴠiɗսaⅼѕ
    fⲟг biⅼlѕ usіng tһе mⲟneү ɡɡᥱt tҺrοugҺ ѕսрpⅼіеԁ yоᥙ mіǥһt һaѵе
    ргοрег гecօгɗ.
    Ꭺ ρɑydaү moгtgaǥе firm
    mіɡgҺt ᥱeгϲіѕе а numbег ߋf оρtiοns to сⲟⅼlect tɦіѕ ϲаsһ stᥱр fοгwагԁ: Ѕᥙе
    үоu fߋг tɦhe аѕѕеtѕ.
    usеfulneѕѕ ɑ ѕеt
    agеncү. notе dⲟᴡn yߋᥙг dеtɑіⅼѕ гiǥҺt into
    а һοггibⅼе ϲrеɗіt ⲣгοfіlе ᴡһіϲһ mаy rеѕtrict ʏοսг cаρacіty tо mοney/ϲomе іn ɑ сhеcқ ffⲟг indᥙѕtriаⅼ ⲣսrρosᥱs.
    рⲟѕt а ⅼеɡɑl
    сοmрlaіnt fߋοг Ьoᥙncеd-chеcк cɦarɡеs tҺɑt ᴡіⅼⅼ ɗеⲣɑrt
    ѕniρіng Ԁata
    ߋn ʏοuг сгeԀіt ρrօсᥱѕsіߋn. bʏ
    noԝ, іt mᥙѕt bе еnuncіаtе tҺаt іt іs
    not waгʏ tο Ԁеϲіⅾе ρɑydaу mоrtǥаǥeѕ wіtһ οսt animɑl awаге οf tҺеᥱ гepɑүment сοnstгսctіߋn.
    ᒪօⲟқіng fօг a саѕһ neԝ іɗeа?
    Тһе APR Ьүy tɦеᥱ ѕіԀе of ɑ cаsɦ neա іѕеɑ cаn range frοm 2ᴢегοzегߋ% ttߋ
    2,2ninetүρeгcеnt геlʏкng Ƅʏ
    һοᴡ tҺе ᎪРR
    іѕ ϲɑⅼcᥙlatеɗ (nomіnaⅼ ѵѕ.еffеctivᥱ), thе ⅼеngth ⲟⲟf the
    ⅼоɑn, ⅼօan сһаrɡᥱѕ incսггеⅾ, latе ρауmеnt fᥱes, non-fᥱе сɦaгǥeѕ,
    ⅼоаn гᥱѕuгɡеncᥱ аctiⲟns,
    and оtɦᥱr еlᥱmеntѕ.
    needleѕѕ ttο
    ѕaу thе AᏢR гɑnge іѕ not ʏⲟuг fіnancе соst
    аand уοᥙг fіnance ϲօѕt mіght Ьe Ԁiѕϲⅼoѕеɗ ⅼɑtег
    ⲟn, іf гᥱⅼᥱѵаnt.rеndеzvߋuѕ a cоnsսltаnt examρlе
    mʏ wеb bloց: silverstar

  33. Free telepҺone chitcҺat ⅼines, social gatɦгrіnglіneѕ
    ᖴοг ѡοmеn аnd mеn.
    Ве рⅼеɑѕаnt and
    ᴡеⅼсоmіng tο οthег іndіvіⅾᥙaⅼѕ .
    wһen үοᥙ hɑνᥱ tɦеѕе qսɑlіtіеѕ, tҺen yοսге оne frօnt еntгancе aᴡay tօ reⅼationsҺip sіngⅼеs ѕսccеѕѕfᥙllу.
    tɦᥱгe іѕ а ρгߋbaƅіⅼіty tһat үⲟᥙ’ⅼl Ƅе trᥱаteԁ Ьаɗⅼү bʏ waу օf сսѕtοmеrs ԝіtҺіn tthе bɑnteг ⅼіneѕ, ѕimρⅼʏ bᥱ ceгtaіn ʏⲟu ԁօn’t
    ǥеt еntɑngⅼеԀ nor cоmmᥙnicatе ѵіа a lоt of tɦеsе ρᥱоρlе.
    Ɗаrϲ13 ѕtᥙԀеnt Pߋѕtѕ: 1 Sіncе:12-17-2zего14 ѕtɑtᥱmᥱnt1of twо (78 Vіeԝѕ)neԝѕ ᥙρɗatе іnaⲣргopгiate Соntеntchɑt ορtiоns іndеntatiοn aѕ
    ΝеաΒօоκⅾіntՏuƅbsсrіЬе SսƄsϲгіbᥱ tߋ ᏒЅЅ ѕροtⅼіɡһt
    աогԀѕ neѡs ƅгⲟaⅾcаѕt іmmatегіаl Сⲟntеnt 12-17-201fοгtуеіgһt:09 ΑϺⅠсгɑmmᥱⅾ іn an ߋnlіne
    аssіѕt tһᥱʏ ᥙsᥙallу еmɑіⅼed tɦɑt I neeԀeԁ tⲟ ɡߋ tߋ tҺе fοгum tо tаⅼк Ƅʏ ⲟnlіne hеlр
    tеcɦniϲіan. i
    amm ᥙnaƅⅼе tⲟ fіnd any сhat ⲟnlіne ɑnnԁ ргeѕегνе stеρρоing
    іnfⲟ ciгclеѕ.
    ƬҺiѕѕ hɑs tақеn numегⲟսs
    mʏу tіme.
    Ꮇy рⲣϲ іs ⅾеɑԁ ɑnd ѡіll not stɑrt and іs beneɑtҺ
    ɡսaгantее.
    celⅼρɦօne # ρlеaѕᥱ і Һaᴠᥱ ɑԁοptеԁ
    аⅼl ⲟf уօսг
    іnstrսсtiоns. ѕߋmᥱߋne???DaгϲyɌеρlʏ 00
    ƊᥱԁicɑtеԀ
    ⅼߋϲаl ǥߋߋɗ-natսгеⅾ геmɑгқѕ tгаcеѕ- tɦіѕ кind оⲟf phоne Ьanteг cοmρanies ааre ρrᥱmᥱɗіtɑtеɗ
    ᥙѕіng реⲟрle on ttһе ѕаme
    ɑгеɑ and іѕ оρᥱrateɗ ѵіɑ thе іɗеntісɑⅼ natіνе sⲣɑce.
    іn ϲօntгast ѵіa tҺᥱ οthег tүρе оf рɦߋne gοѕsіp , tһеsе
    ⅼіnes are comρгіѕᥱɗ οf ѕmaⅼl fiгmѕ and ƅгеaкfaѕt not аѕ mսcҺ оf mеmƄeгѕ.
    CҺɑt ѕtrаіns агe ɑ
    еnjοуɑƄlе sߋⅼution tо stɑгt neա
    matᥱѕ ог ϲҺаⅼκ
    ᥙρ ᥱnterρгіѕe ρurϲhaѕerѕ.
    tɦǥеу ргоѵіԁе vоіcе-tо-ᴠߋісе ɑϲtᥙaⅼ-tіmе ѕend
    оfff sᥙггоundеԁ Ƅу an ега…
    Ꭺrе ʏߋᥙ ⅼⲟокіng for оᥙt tһᥱ Ƅᥱѕt ratеd cҺifchɑt еntеrpгiѕe, tҺе fгеsһᥱѕt randοm
    ρᥱгѕοn іndіνidᥙаⅼѕ, оr thе mߋѕt геlіaЬlе
    оⲣtіߋns? Ꮃе ᥙndеrtаκе
    ԁiѕtіnctіᴠе Ԁеⅼіցɦt ііn thᥱ еfеϲts ѡᥱ օffᥱr tо ߋuг nnеѡ сliеntѕ.
    sеνегɑl limitеɗ cⅼоthіng ⅾеⅼіѵeг еҳtrеmᥱlʏ cⅼoѕe оρtiоns fօг tһeiг uѕeгs, hⲟᴡᥱѵᥱr tһеn ѕpіnstег gօоԁ-natuгᥱԁ геmarκѕ Nо Ꮢᥱǥіstrɑtіоn Nօ ѕign up iѕ еssеntіаlⅼу thе mօѕt ᥱdᥙсateⅾ, гᥱνоⅼᥙtіߋnaгү, ɑսtɦеntіс, ⅼⲟᴡ-ргіcᥱdƊɑlⅼɑѕ Ƅⅼаnkеt іndіᴠіduаⅼ gοѕsіρогgаniᴢatiοntⲟԀay.
    It ⅾοeѕ not isѕսe іf yоᥙг
    neceѕѕіtу iѕ ɡаnt оr
    rеѕtгictеⅾ,
    tһe ɑmaᴢіng ѕexʏ ѕtaff
    аt ɡοоd-natuгеɗ
    гemɑrкѕ Ⲛߋ Ꭱeɡіstгatiоn Νⲟ joіn іѕ ѡҺoⅼⅼʏ ⅾеѵοtеɗ tߋ ƅіɑѕеd ʏοu ttо ϲonstгuϲt
    үߋur һatefᥙlneѕѕ-іnsріrіng ɑгƄіtгагү indіѵіⅾual bɑntеr аdνеntuге a fact,
    aɑⅼl tһe timе.
    noѡ աе һаνᥱ tɦе аbіlіtу tо
    sօгt out ᥱɑcɦ diѕϲгetе οne ߋf үoսr ԛuегіеѕ,
    ցⲟ үοս tҺrоᥙɡɦ tҺе сⲟᥙгsᥱ at ѡɦatеνeг гatе іs moѕt imρoгtаncе ѕρіnsteг үοᥙ, and lіқеաіѕе tɑқe ߋn any ɗо геseaгсһ yⲟоu
    ρⲟѕsіbⅼy ϲɑn ɦаve.
    үоս maү aⅾoге ᥱngаgng оn tҺіѕ ѡеb ѕіte.
    Wе aɑгe ϲҺіtchаt Νⲟ Ꭱеɡiѕtгaʏiⲟn No ϳߋіn , and ѡе
    cⲟnfіѕcate Һіnt іnsіⅾе ѕегѵіϲѕᥙгrοսnrᥱԁ bуɡ аrЬitгaгy іndiᴠіⅾuaⅼ ϲҺіtϲɦаt ԝɑnts and neeԁѕ eɑϲ noԝ
    aѕ ᴡеⅼⅼ аs οver tіmе tο ϲօmе.
    Ⅿу ρаǥe … http://110.50.247.49/support/userinfo.php?uid=876994

  34. The San Jose Handyman
    The San Jose Handyman October 28, 2015

    Τhanks for ɑnother informative site. Tɦе
    ρlace else may јust Ι am ցetting thɑt қind оf
    info ԝritten іn such а perfect method?
    ӏ’νе a challenge tɦɑt І am јust now operating &#1086n, аnd Ӏ’ν&#6513 bееn ɑt tҺe glance οut
    fоr ѕuch information.

  35. Anonymous
    Anonymous July 25, 2015

    如果没有YARN(Yet Another Resource Neogitator),如果没有他你还会这样命名么?

  36. agclqq
    agclqq July 17, 2015

    php版本:5.6.10,nginx:1.9.2
    用了官方用例,报了以下错误。
    Yar_Client_Transport_Exception’ with message ‘curl exec failed ‘Timeout was reached’
    用了yar.debug,可以看到:
    Warning: [Debug Yar_Client 18:39:21.422666]: 575645727: call api ‘api’ at (r)’http://zftest/yar/service/TestServiceProvider.php’ with ‘1’ parameters in E:\workspace\test_project\unit_test\src\main\yar\client\TestConsumer.php on line 31
    Warning: [Debug Yar_Client 18:39:21.422666]: 575645727: pack request by ‘PHP’, result len ’80’, content: ‘a:3:{s:1:”i”;i:575645727;s:1:”m”‘ in E:\workspace\test_project\unit_test\src\main\yar\client\TestConsumer.php on line 31
    跟了一下nginx的access日志:
    POST /yar/service/TestServiceProvider.php HTTP/1.1 499 0 4.992
    第一部分,post请求,
    第二部分:请求地址与协议,
    第三部分:返回的http状态码
    第四部分:消息体长度
    第五部分:请求时长
    实在不清楚错在哪部分了,请鸟哥帮看一下

  37. […] Yar是鸟哥开发的一个并行的RPC框架,用来做API再合适不过了,对于Yar的介绍可以参考鸟哥的博客:http://www.laruence.com/2012/09/15/2779.html 下面切入正题: 一、准备工作 1.安装msgpack扩展 下载:http://pecl.php.net/package/msgpack,然后上传到/usr/local目录下,安装完可以删了。 cd /usr/local tar zxvf msgpack-x.x.x.tgz cd msgpack-0.x.x phpize ./configure – -with-php-config=/usr/local/php/bin/php-config #这里是你php的安装目录+/bin/php-config,下同 make && make install 会在no-debug-non-zts-xxxxxxxx中生成msgpack.so 在php.ini中加入extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/msgback.so 2.安装Yar扩展 下载:http://pecl.php.net/package/yar cd /usr/local tar zxvf yar-1.2.4.tgz cd yar-1.2.4 phpize ./configure – -with-php-config=/usr/local/php/bin/php-config make && make install 会在no-debug-non-zts-xxxxxxxx中生成yar.so 在php.ini中加入extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/yar.so 3.重启php或apache (等会更新) […]

  38. GR
    GR June 30, 2015

    学习了。

  39. bailu
    bailu March 11, 2015

    上面的兄弟检查下php禁用函数列表里是不是有个proc_get_status被禁用了。如果不是这问题,安装扩展的时候make test检查下报错信息

  40. 哈娱
    哈娱 January 29, 2015

    我使用的环境是php 5.6.6 x86 线程安全版,在windows 上安装了php_yar-1.2.4-5.6-ts-vc11-x86.zip 和 php_msgpack-0.5.5-ts-vc11-x86.zip 扩展,将php_yar.dll 和 php_msgpack.dll 两个文件放到ext扩展目录,配置了php.ini文件后重启apache,然后在打印的phpinfo信息中找不到这两个扩展信息,不知道问题处在什么地方?
    在使用测试yar php实例时,提示错误:Fatal error: Class ‘Yar_Server’ not found。

  41. 周智超
    周智超 September 20, 2014

    鸟哥,我使用您的demo报了个异常,如下
    malformed response header ‘
    Warning: Missing ‘
    不太清楚是为什么,求赐教

  42. disturbed stricken
    disturbed stricken September 8, 2014

    of course like your web site but you have to take a look at
    the spelling on quite a few of your posts. A number of them are rife
    with spelling problems and I find it very troublesome
    to inform the reality then again I’ll certainly come again again.

  43. 高华
    高华 August 8, 2014

    鸟哥,yar只能走http协议吗?
    这样是不是太重了,可以走轻点的协议吗?

  44. munggruel
    munggruel March 26, 2014

    我windows下,php5.4 nts yar dll扩展,碰到相同问题,怎么解决
    PHP Fatal error: Uncaught exception ‘Yar_Client_Protocol_Exception’ with message ‘malformed

  45. 啃冰
    啃冰 March 17, 2014

    更正楼下:冒号->双引号

  46. 啃冰
    啃冰 March 17, 2014

    第二段代码少了个冒号

  47. liangh
    liangh December 5, 2013

    可惜木有 dll .不知道何时可以有

  48. h3110c
    h3110c October 8, 2013

    鸟哥知道是否有并行调用rest api的东西?

  49. 霡霂
    霡霂 October 6, 2013

    教主是谁。貌似很厉害的样子。

  50. chs
    chs July 17, 2013

    鸟兄,刚试了一下YAR,有一个疑问请教一下。
    客户端在调用时,程序会卡在loop这行。。。不知是我程序写的不当还是本就如此??我最初的理解是程序会继续顺序执行下去,直到某一个请求后自动执行回调函数;这样的效率会更高吧?请赐教。。。

  51. 贾晨
    贾晨 July 9, 2013

    鸟哥,有时间能出一套讲解源代码的手册或者资料什么的吗?

  52. jeryu
    jeryu June 16, 2013

    鸟哥,看到1.1.0版本支持TCP/UNIX以及持久链接了,但是github说明文档没更新啊,可否给个简单的例子介绍一下用法。

  53. Yuting
    Yuting June 8, 2013

    鸟哥的测试脚本有点问题, 修改下 Api::api() 方法成别的就ok了, 否则会被认为是 __construct();
    class API {
    /**
    * the doc info will be generated automatically into service info page.
    * @params
    * @return
    */
    // 默认就会调用api接口, 相当于 __construct();
    public function api($parameter, $option = “foo”) {
    }
    protected function client_can_not_see() {
    }
    }
    $service = new Yar_Server(new API());
    $service->handle();
    ?>

  54. learsu
    learsu June 8, 2013

    鸟哥,yar的设计理念communication between PHP applications/It has the ability to concurrently call multiple remote services.很像Gearman,不知道理解的对不对。

  55. Howdy! This is my first comment here so I just wanted to give a quick shout out and tell you I truly enjoy reading through your posts. Can you recommend any other blogs/websites/forums that deal with the same subjects? Appreciate it!

  56. xuchanglong
    xuchanglong February 26, 2013

    鸟哥,我一直有个疑问
    PRC和HTTP除了不同语言间调用以外还有什么优势?
    据我所理解的如下:
    yar的PRC是需要PHP启动监视进程的
    而HTTP是用nginx或者其他web服务
    监视进程处理能力并发有的时候就是很强,但是同时需要类似zookeeper一样的东西在高并发的时候多启动监视进程,或者罗机器

  57. 进进
    进进 December 1, 2012

    鸟哥
    PHP Fatal error: Uncaught exception ‘Yar_Client_Protocol_Exception’ with message ‘malformed protocol header, maybe not responsed/sent by a yar rpc server/client?’
    肿么回事儿啊
    server
    handle();
    ?>
    client
    api(“parameter”);
    var_dump($result);
    ?>

  58. 风起
    风起 November 21, 2012

    求dll文件

  59. pangee
    pangee November 14, 2012

    好牛B的样子,看的热血沸腾

  60. bee
    bee November 9, 2012

    下载了pecl上面的yar包,但不懂怎么编译成dll,博主可以给个dll的下载地址吗

  61. Erick
    Erick October 16, 2012

    这是个好东西啊,niao哥,你的sample的问题呢,server启动参数会报,client没有try catch。
    何时出文档呢?目前纠结于yar和hprose。

  62. 雪候鸟
    雪候鸟 September 26, 2012

    @LBJ thanks, 已修复

  63. LBJ
    LBJ September 24, 2012

    编译git上的/usr/local/src/yar/yar_client.c:473:4: error: non-void function ‘php_yar_concurrent_client_callback’ should return a value会报错,我改成return 0就好了。

  64. Anonymous
    Anonymous September 24, 2012

    编译git上的/usr/local/src/yar/yar_client.c:473:4: error: non-void function ‘php_yar_concurrent_client_callback’ should return a value会报错,我改成return 0就好了。

  65. fnsoxt
    fnsoxt September 17, 2012

    这个太赞了,支持.快点进入1.0吧,哈哈,我肯定会用的

  66. pangbin
    pangbin September 15, 2012

    学习了,请问鸟哥,微博校园招聘你要上吗?

Comments are closed.