热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rpc以及php使用到的rpc

目录rpc相关知识准备1远程调用原理2远程调用和SocketRest的区

  • 目录
    • rpc相关知识准备
      • 1 远程调用原理
      • 2 远程调用和Socket Rest的区别
    • 流行的rpc框架
      • 1 phprpc实例
      • 2 yar实例


目录

1. rpc相关知识准备

rpc的全称是remote procedure call,翻译过来就是远程过程调用

远程调用的意思就是程序调用的方法实现不是在程序所在的本地,而是在远程的某个地方。远程调用的好处就是解耦。【当server需要对方法内实现修改时,client完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露】

1.1 远程调用原理

比如 A (client) 调用 B (server) 提供的remoteAdd方法:

  1. 首先A与B之间建立一个TCP连接;
  2. 然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10,20)序列化成字节流发送出去;
  3. B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回;
  4. A接受远程调用结果,输出30。

RPC框架就是把我刚才说的这几点些细节给封装起来,给用户暴露简单友好的API使用。

1.2 远程调用和Socket Rest的区别

RPC、Socket、Rest都是是client/server模式的

  1. 跟Socket什么区别?socket是RPC经常采用的通信手段之一,RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源。除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等技术来实现对于远程程序的调用。
    2.跟Rest什么区别?REST API 是基于 HTTP协议的,REST致力于通过http协议中的POST/GET/PUT/DELETE等方法和一个可读性强的URL来提供一个http请求。而 RPC 则可以不基于 HTTP协议
    因此,如果是后端两种语言互相调用,用 RPC 可以获得更好的性能(省去了 HTTP 报头等一系列东西),应该也更容易配置。

2. 流行的rpc框架

phprpc,yar, thrift, gRPC, swoole, hprose

2.1 phprpc实例

先来个简单的例子,phprpc也是分为服务器端和客户端的。所以文件夹中对应的就是phprpc_server.php 和 phprpc_client.php

phprpc_client.php


include ("phprpc/phprpc_client.php");
$client = new PHPRPC_Client('http://127.0.0.1/server.php');
echo $client->HelloWorld();

phprpc_server.php


include ("phprpc/phprpc_server.php");
function HelloWorld() {
    return 'Hello World!';
}
$server = new PHPRPC_Server();
$server->add('HelloWorld');
$server->start();

2.2 yar实例

先来个简单的例子,yar也是分为服务器端和客户端的。所以文件夹中对应的就是yar_server.php 和 yar_client.php

yar_client.php


$client = new Yar_Client("http://127.0.0.1/yar_server.php");
echo $client->api('helo word');

yar_server.php


class API {
    public function api($parameter, $option = "foo") {
        return $parameter;
    }
    protected function client_can_not_see() {
    }
}
$service = new Yar_Server(new API());
$service->handle();

推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有