目录
- 1.什么是RPC
- 2.从通信协议的层面
- 3.从不同的开发语言和平台层面
- 4.从调用过程来看
- 5.常见的几种通信方式
- 6.php实现简单的rpc
- 1.目录结构
- 2.rpc服务端
- 3.rpc 客户端
- 4.提供服务的文件
- 5.效果
- 7.RPC的注意事项
1.什么是RPC
RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。远程调用的应用场景极其广泛,实现的方式也各式各样。
2.从通信协议的层面
基于HTTP协议的(例如基于文本的SOAP(XML)、Rest(jsON),基于二进制Hessian(Binary))
基于TCP协议的(通常会借助Mina、Netty等高性能网络框架)
3.从不同的开发语言和平台层面
单种语言或平台特定支持的通信技术(例如java平台的RMI、.NET平台Remoting)
支持跨平台通信的技术(例如HTTP Rest、Thrift等)
4.从调用过程来看
同步通信调用(同步RPC)
异步通信调用(MQ、异步RPC)
5.常见的几种$urlInfo = array();
/**
* RpcClient constructor.
*/
public function __construct($url)
{
$this->urlInfo = parse_url($url);
}
/**
* User: yuzhao
* CreateTime: 2018/11/16 上午12:2
* Description: 返回当前对象
*/
public static function instance($url) {
return new RpcClient($url);
}
public function __call($name, $arguments)
{
// TODO: Implement __call() method.
//创建一个客户端
$client = stream_socket_client("tcp://{$this->urlInfo['host']}:{$this->urlInfo['port']}", $errno, $errstr);
if (!$client) {
exit("{$errno} : {$errstr} \n");
}
$data = [
'class' => basename($this->urlInfo['path']),
'method' => $name,
'params' => $arguments
];
//向服务端发送我们自定义的协议数据
fwrite($client, json_encode($data));
//读取服务端传来的数据
$data = fread($client, 2048);
//关闭客户端
fclose($client);
return $data;
}
}
$cli = new RpcClient('http://127.0.0.1:8888/test');
echo $cli->tuzisir1()."\n";
echo $cli->tuzisir2(array('name' => 'tuzisir', 'age' => 23));
4.提供服务的文件
<?php
/**
* User: yuzhao
* CreateTime: 2018/11/16 上午12:28http://www.cppcns.com
* Description:
*/
class Test {
public function tuzisir1() {
return '我是无参方法';
}
public function tuzisir2($params) {
return $params;
}
}
5.效果
7.RPC的注意事项
性能:影响RPC性能的主要在几个方面:
- 序列化/反序列化的框架
- 网络协议
- 网络模型
- 线程模型等
安全
RPC安全的主要在于服务接口的鉴权和访问控制支持。
跨平台
跨不同的操作系统,不同的编程语言和平台。
到此这篇关于详解如何利用PHP实现RPC的文章就介绍到这了,更多相关PHP RPC内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
海报
0 条评论
65
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~