>  기사  >  php教程  >  并行的RPC框架

并行的RPC框架

WBOY
WBOY원래의
2016-06-13 11:15:121808검색

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

考虑如下的场景:

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

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

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

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

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

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

Yar是一个非常轻量级的RPC框架, 我在实现Yar的时候, 追求了极致的轻量级, 它使用非常简单, 对于Server端:

<ol class="dp-c">
<li class="alt"><span><span><?php  </span></span></span></li>
<li>
<span class="keyword">class</span><span> API {  </span>
</li>
<li class="alt">
<span>    </span><span class="comment">/** </span> </li>
<li><span><span class="comment">* the doc info will be generated automatically into service info page. </span> </span></li>
<li class="alt"><span><span class="comment">* @params </span> </span></li>
<li><span><span class="comment">* @return </span> </span></li>
<li class="alt"><span><span class="comment">*/</span><span> </span></span></li>
<li>
<span>    </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> api(</span><span class="vars">$parameter</span><span>, </span><span class="vars">$option</span><span> = </span><span class="string">"foo"</span><span>) {  </span>
</li>
<li class="alt"><span>    }  </span></li>
<li><span>   </span></li>
<li class="alt">
<span>    </span><span class="keyword">protected</span><span> </span><span class="keyword">function</span><span> client_can_not_see() {  </span>
</li>
<li><span>    }  </span></li>
<li class="alt"><span>}  </span></li>
<li><span>   </span></li>
<li class="alt">
<span class="vars">$service</span><span> = </span><span class="keyword">new</span><span> Yar_Server(</span><span class="keyword">new</span><span> API());  </span>
</li>
<li>
<span class="vars">$service</span><span>->handle();  </span>
</li>
<li class="alt"><span>?>  </span></li>
</ol>

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

Yar为了方便开发, 把文档和接口绑定到了一起, 对于上面的例子, 如果我们是简单的GET请求这个接口地址的话, 我们就会看到如下的信息页面:


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.