1.基本概念
Remote Procedure Call,即远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。
如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。
2.RPC的实现流程
- 客户端调用client stub,client stub收到调用后 将方法,参数等转换为标准格式并打包到网络消息中;
- 网络消息内核通过某种协议(例如sockets)传输到远程系统;
- server stub收到消息后,将消息转换成自己需要的特定格式,并传送给服务器函数;
- 服务器函数执行完后,将返回值返回给server stub;
- server stub转换返回值,并通过网络发送回client stub;
- client stub读取到消息后,解码转换消息,并发送回客户端函数;
ps:
stub 是一段用来转换RPC过程中传递的参数的代码。处理内容包括不同OS之间的大小端问题。
另外,Client端一般叫Stub,Server端一般叫Skeleton。
生产方式:1)手动生成,比较麻烦;2)自动生成,使用IDL(InterfaceDescriptionLanguate),定义C/S的接口。
交互机制标准:一般采用IDL,生成IDL的工具 RPCGEN()。
3.Hprose for PHP http为例
Hprose 是高性能远程对象服务引擎( High Performance Remote Object Service Engine)。
它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件。它不仅简单易用,而且功能强大。它提供了高效的序列化和反序列化库,并在此基础上提供了方便灵活的 RPC 引擎。
Hprose支持许多编程语言,例如:
- AAuto Quicker
- ActionScript
- ASP
- C++
- Dart
- Delphi/Free Pascal
- dotNET(C#, Visual Basic...)
- Golang
- Java
- JavaScript
- Node.js
- Objective-C
- Perl
- PHP
- Python
- Ruby
01 安装
你的 composer 项目中的 composer.json 文件中,添加这部分:
{
"require": {
"hprose/hprose": ">=2.0.0"
}
}
或者直接下载
git clone https://github.com/hprose/hprose-php
也可以点击
https://github.com/hprose/hprose-php/archive/master.zip 下载最新内容的压缩包,然后解压。
02 创建服务器
use Hprose\Http\Server;
function hello($name) {
return "Hello $name!";
}
$server = new Server();
$server->addFunction('hello');
$server->start();
03 客户端
$client = new \Hprose\Http\Client('http://hprose.com/example/', false);