目录
1.什么是RPC2.从通信协议的层面3.从不同的开发语言和平台层面4.从调用过程来看5.常见的几种通信方式6.php实现简单的rpc1.目录结构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:28 * Description: */class Test { public function tuzisir1() { return '我是无参方法'; } public function tuzisir2($params) { return $params; }}5.效果

7.RPC的注意事项
性能:影响RPC性能的主要在几个方面:
序列化/反序列化的框架网络协议网络模型线程模型等安全
RPC安全的主要在于服务接口的鉴权和访问控制支持。
跨平台
跨不同的操作系统,不同的编程语言和平台。







