资讯专栏INFORMATION COLUMN

phpcms 里面 Yar 的使用

chnmagnus / 2581人阅读

摘要:的框架的话语言的话首选的当然是鸟哥的,支持并行等等,总之有很多优点。首先查看了鸟哥的文章并行的框架,对的基本原理有了一个认识,做了一个简单的请求页面,具体见鸟哥博客,没问题,接下来就是对现有项目的改造了。最后感谢鸟哥写出这么牛掰的东西。

公司新上了个频道,需要我负责的几个频道提供接口,因为进度比较赶,就直接写了web的 http 接口供同事访问。

后来访问量越来越大,出现了很多问题,例如:因为是json传递数据,偶尔会出现乱码的情况.他们是在php文件中直接调用的接口,如果网络情况不好会出现页面很慢的情况。老板说要解决掉这个问题。想了很多办法,最后决定从网络方面入手。决定采用RPC来避免http的请求。

RPC的框架的话,php语言的话首选的当然是鸟哥的yar,支持并行等等,总之有很多优点。

首先查看了鸟哥的文章 Yar – 并行的RPC框架(Concurrent RPC framework) ,对Yar的基本原理有了一个认识,做了一个简单的请求页面,具体见鸟哥博客,没问题,接下来就是对现有项目的改造了。

原来有项目是用phpcms(没有使用生成功能)和YII做的。因为phpcms相对而言要简单的多,所以先从phpcms入手,来对框架进行改造,加入Yar的机制。

原来所有的外部接口全部是通过phpcms的api机制来实现的,所以先从入口文件入手,入口文件的代码如下:

define(‘PHPCMS_PATH’, dirname(FILE).DIRECTORY_SEPARATOR);
include PHPCMS_PATH.’phpcms/base.php’;
$param = pc_base::load_sys_class(‘param’);

$op = isset($GET["op"]) && trim($_GET["op"]) ? trim($_GET["op"]) : exit(‘Operation can not be empty’);
if (!preg_match(‘/([^a-z
]+)/i’,$op) && file_exists(PHPCMS_PATH.’api/’.$op.’.php’)) {
include PHPCMS_PATH.’api/’.$op.’.php’;
} else {
exit(‘API handler does not exist’);
}

文件非常简单,就是引入了base基本类,还有很多判断,因为Yar的服务端最好不要有数组,所以需要对判断等进行改造,取消所有的输出,将必要的错误判断以return的方法返回。幸运的是,api的入口文件并没有初始化路由,所以就省去了好多操作,只需要对入口文件做一些简单的修改就可以了。

在api的入口文件上加这两行来出事化yar的服务:

$server = new Yar_Server(new $op());
$server->handle();

$op是初始化的类名,和鸟哥的那个例子中的server端的类名是同样的效果,不同的是因为业务需求,需要根绝请求url的参数来初始化不同的类。达到我们需要得效果。

剩下的就还剩下原来的api调用文件中的路由了。将路由去掉,可以根据映射添加一些客户端需要得方法,例如:方法列表等等。

然后在客户端模拟其他频道的请求,代码如下:

$client = new Yar_Client(“http://zjk.fh21.net/api.php?op=iask”);
$return = $client->get_sort_data();
var_dump($return);

可以正常的获取到结果,OK,改造完成,现在只需要让别的频道稍微改一下调用方式就可以了。

ps:可能还有其他的工作要做,例如:将原来一些方法名在根绝新的功能修改等等。

后来通过反复测试发现,接口之间的交互可以直接通过php的数组来进行,而没必要用Json数据。因为我们的页面全是gbk的,所以节省了很多开发成本.

yar的基本原理就是这样,最重要的是要把自己所用框架的基本逻辑搞清楚,只要把yar整合到自己的框架中,基本上就等于是成功了。

最后 感谢鸟哥写出这么牛掰的东西。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20760.html

相关文章

  • 服务治理深入浅出(2)- 远程方法调用实现

    摘要:需求在了解了前面我们关于服务治理出现的必要性之后。我们知道服务治理是建立在众多服务基础之上的,那么,第一步,打通这些服务是基础,也就是我们常说的远程调用。上面执行远程调用也类似。 需求 在了解了前面我们关于服务治理出现的必要性之后。我们知道服务治理是建立在众多服务基础之上的,那么,第一步,打通这些服务是基础,也就是我们常说的 RPC 远程调用。要像调用本地方法一样调用远程服务器上的方法...

    hidogs 评论0 收藏0
  • SOA面向服务基础

    摘要:面向服务面向服务的基础面向服务的三层应用层,服务层,数据层应用层用于给用户展示,,,,安卓。在服务器端,进程保持睡眠状态直到调用信息到达为止。编译完成,提示我们已经在下了。 面向服务 面向服务的基础 面向服务的三层:应用层,服务层,数据层 * 应用层:用于给用户展示,PC,H5,IOS,安卓。 * 服务层:业务逻辑,提供接口(商品,订单,支付,用户,物流)。 * 数据层:提供数据支持(...

    songze 评论0 收藏0
  • 并行RPC框架(Concurrent RPC Framework) Yar Java Client

    摘要:客户端并行调用这两个服务这里的方法的命令皆以原版为准则。回调函数需要继承实现里面定义了两个方法是针对并行调用发出之后立即执行的任务,而则是每个请求之后返回的结果。 简介 Yar 是一个轻量级, 高效的 RPC 框架, 它提供了一种简单方法来让 PHP 项目之间可以互相远程调用对方的本地方法. 并且 Yar 也提供了并行调用的能力. 可以支持同时调用多个远程服务的方法.Yar 鸟哥博客介...

    wh469012917 评论0 收藏0
  • PHP基于laravel框架获取微博数据之一 模拟新浪微博登录

    摘要:模拟登录新浪微博的核心,也是与模拟登录最大的不同,密码加密。已经实现模拟新浪微博登录的功能,之后不再更新。 参考资料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/fly_leopard/article/details/51148904 http://www....

    galois 评论0 收藏0
  • 基于YarWordPress微博墙插件

    摘要:微博墙就是这样的一个工具,这不是一款普通的插件,这是一款搭建在基于的插件。这是一款基于的插件,底层语言开发,性能卓越。 在现在移动互联网时代,微博已经成为了每个人生活中必不可少的一个社交工具。而WordPress是全世界最为流行的博客系统,把你的博客接入新浪微博,借助微博的强大用户群,不仅能给你的网站提供巨大的流量,而且还能带来不可估量价值。 WordPress微博墙就是这样的一个工具...

    james 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<