—————RPC之概览篇———————————————————-
RPC: Remote Procedure Call
RPC其实是个笼统的概念,只要符合远程过程调用特征的都属于RPC这个范畴。
RPC的特征包括:
1. 它是一种远程交互。
2. 发起方程序和反应方程序在不同的地址空间运行。
3. 程序员无需知道远程交互的细节。远程调用和本地调用的代码差别不大。程序员所写的远程调用代码就如同本地调用一样,底层框架已经封装了细节。
RPC的历史与起源:
将网络操作看成远程方法调用这种想法最早始于20世纪80年代的ARPANET文档。RPC这个术语的发明人是Bruce Jay Nelson. RPC第一次商用是在20世纪80年代的施乐公司。第一次广为人知的实现是在Unix操作系统上的SUN RPC。
RPC的消息传递:
一个RPC过程由客户端发起。客户端发送一个请求消息给远程服务器要求执行某个过程/例程,远程服务器从请求消息中获取过程调用的参数开始执行过程,服务器执行完毕后将结果返回给客户端。在服务器处理客户端调用过程中,客户端一直处于阻塞状态,直到服务器执行完毕并返回结果,客户端才能进行后面的操作。
与本地调用的一个显著不同点是,远程调用因为网络故障容易失败,而且调用者要负责处理这种调用失败。
每个厂家的RPC实现所采用的底层传输协议、数据编码/序列化和反序列化都有所不同。比如XML-RPC采用XML格式,JSON-RPC采用JSON格式,SOAP采用带schema和namespace的XML,Google protocolbuf采用私有二进制格式,Apache Thrift采用二进制格式。
从最早的Sun的RPC 到XML-RPC/JSON-RPC、微软的DCOM, 再到SOAP, CORBA, Java RMI,WCF 再到最近的protocolbuf,avro,Thrift 。RPC所采用的技术也在不断发展之中。
——————–RPC之RMI篇———————————————————–
RMI,Corba,JMS比较:
http://visionsky.blog.51cto.com/733317/438693
Java RMI实现:
http://docs.oracle.com/javase/tutorial/rmi/index.html
——————–RPC之RMI-IIOP篇——————————————————
——————–RPC之WebService篇—————————————————-
——————–RPC之数据序列化与反序列化篇——————————————
——————–RPC之Apache Avro篇—————————————————
——————- RPC之google protocolbuf篇——————————————–
——————- RPC之Apache Thrift篇————————————————