博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yar粗略使用记录
阅读量:6463 次
发布时间:2019-06-23

本文共 2408 字,大约阅读时间需要 8 分钟。

是鸟哥()开发的。据说sina weibo已经在大规模使用这个框架了。今天初步使用了下,觉得还是挺爽的一个工具。

什么情况适用这个工具呢?

比如一般你有个微博这样的一个项目,这个项目的特点是有多个子项目组成,即有web版,手机客户端版,wap版等。

一般有这么多个子项目,且项目的页面逻辑是分开的,我们自然会建立多个项目,然后分拆给不同的人负责。

但是呢,这么多版本,它的功能实际都是相似的,比如必须都有个获取好友的功能,必须有个获取好友动态的接口,那么虽然这个接口的表现形式可能是不一样的,但是它的数据逻辑是一样的,如果使用MVC的分层模型来说,Controller和View层各个项目是不一样的,但是Model层实际上是完全相同的。那么怎么能让他们使用同样的model层呢?这个时候就想到了使用。使用RPC就能让各个项目像访问自己的Model层一样访问RPC提供的服务了。换句话说,RPC可以提供业务数据的封装。这个对于公司来说,很爽。为毛呢?因为把业务数据一封装,写一篇足够完善的文档解释提供的rpc文章,这样招一批实习生就只要套套模板就能实现一个很完整的项目了。

需要考虑什么?

但是呢?RPC本质上也是一个网络请求,既然是请求,对于效率来说,就需要考虑了。

首先,基于什么协议层来做网络传输呢,yar是基于http来做的。

其次,能不能多个请求并发呢?

当然可以,yar实现了多个请求并发执行。这里就直接套用yar的文档例子做个演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function 
callback(
$retval
,
$callinfo
) {
     
var_dump(
$retval
);
}
 
function 
error_callback(
$type
,
$error
,
$callinfo
) {
    
error_log
(
$error
);
}
 
Yar_Concurrent_Client::call(
""
,
"some_method"
,
array
(
"parameters"
),
"callback"
);
Yar_Concurrent_Client::call(
""
,
"some_method"
,
array
(
"parameters"
));   //
if 
the callback is not specificed,
                                                                               
// callback in loop will be used
Yar_Concurrent_Client::call(
""
,
"some_method"
,
array
(
"parameters"
),
"callback"
,
array
(YAR_OPT_PACKAGER =>
"json"
));
                                                                               
//this server accept json packager
Yar_Concurrent_Client::call(
""
,
"some_method"
,
array
(
"parameters"
),
"callback"
,
array
(YAR_OPT_TIMEOUT=>1));
                                                                               
//custom timeout
 
Yar_Concurrent_Client::loop(
"callback"
,
"error_callback"
);
//send the requests,
                                                           
//the error_callback is optional
?>

再其次,缓存

既然Model层已经统一了,复用性这么高,那么缓存做在model层就很有用了,因为命中率很高嘛。

缓存yar可没有帮你做,但是我们基于yar做个通用的缓存是很容易的事情,比如你可以使用文件缓存做容灾处理,使用redis做内容缓存加速。

再再其次,安全

提供rpc的机器不能对外提供服务,需要使用签名机制,那么调用rpc的客户端就需要有个做签名的过程,提供rpc的服务端就需要有个解签名的过程。

那么可以这么搞:

意思就是做一个通用的SDK安装在客户端,然后各个项目调用这个SDK,这个SDK可以做什么事情呢?

1 RPC缓存

2 优化调用接口

3 做日志统计

4 做签名验证

怎么搭建?

步骤在github上都已经说很清楚了:

1 php安装yar扩展(可选择安装)msgpack扩展是一个高效的二进制打包协议。rpc的服务端和rpc的客户端都需要安装这个扩展。

2 服务端写model类

3 服务端提供对外的rpc的api服务程序,这个程序大致像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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();
?>

有的人说我希望这个提供rpc的类是我自定义的,那么你就可以使用REQUESTclassnewREQUEST将class参数传入进来,然后在服务端newclass,再使用Yar_Server封装,这样就能加上签名验证,就能将所有的Model类作为rpc提供给客户端了。

4 客户端使用Yar_Client来调用服务端的rpc服务。

转载地址:http://rzrzo.baihongyu.com/

你可能感兴趣的文章
面象过程与面象对象
查看>>
谷歌设置支持webgl
查看>>
js的AJAX请求有关知识总结
查看>>
Eclipse添加新server时无法选择Tomcat7的问题
查看>>
nginx 配置https 负载均衡
查看>>
双拓扑排序 HDOJ 5098 Smart Software Installer
查看>>
三分 POJ 2420 A Star not a Tree?
查看>>
36.Node.js 工具模块--OS模块系统操作
查看>>
存储过程报错行提示
查看>>
Leetcode 4 - median-of-two-sorted-arrays
查看>>
ERDAS软件应用(四)遥感影像数据增强
查看>>
修改OBS为仅直播音频
查看>>
完整版:《开源框架实战宝典电子书V1.0.0》内测版下载地址!
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
CKEditor的使用-编辑文本
查看>>
HDU------checksum
查看>>
使用树莓派拍摄延时动画,制作GIF图
查看>>
js 效果
查看>>
19.Java5同步集合类的应用
查看>>
<c:forEach varStatus="status">中 varStatus的作用
查看>>