PRC通信(Remote Procedure Call Protocol)
RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式。优点是跨语言跨平台,C端、S端有更大的独立性,缺点是不支持对象,无法在编译器检查错误,只能在运行期检查。
Web Service
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。Web Service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,比如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的。就是通过一个servlet,提供服务出去。
原理:
- 1. 采用HTTP协议传输数据
- 2. 采用XML格式封装数据
- 3. 利用SOAP协议封装, SOAP协议 = HTTP协议 + XML数据格式。SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
- 4. WSDL描述文件(存储在中心服务器)。基于XML的语言,用于描述Web Service可以调用的服务及其函数、参数和返回值。
- 5. (可选)UDDI目录服务,企业可以使用它对Webservices进行注册和搜索,如查找WSDL文件
运行流程:
提供者:
设计服务,并将服务的描述文件WSDL在UDDI服务中心注册(发布服务)
消费者:
1. 通过UDDI查找或手动设定WSDL地址,找到服务(发现服务)
2. 解析WSDL描述文件,并连接服务提供者(绑定服务)
3. 发送SOAP消息,并得到提供者处理后的返回(消费服务)
HttpRequest
通常的HttpRequest是指利用HTTP的GET或POST方法发送JSON/XML数据,进行数据的传输。
具体参考HTTP传输协议
RMI (Remote Method Invocation)
RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,通过该机制RMI就好比它是本地工作,采用tcp/ip协议,客户端直接调用服务端上的一些方法。优点是强类型,编译期可检查错误,缺点是只能基于JAVA语言,客户机与服务器紧耦合。
JMS(Java Messaging Service)
JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。
RPC、RMI与WebServer
RPC
跨语言,不支持对象的概念。当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为 “classname”的类中,名叫“methodname”。
RMI
只支持java,允许方法返回 Java 对象以及基本数据类型(序列化),每个远程方法都具有方法签名。
WebServer
webservice是在http协议上传递xml文本文件,与语言和平台无关,并且通过描述文件WSDL进行方法的选择。
JMS、RMI与WebServer
JMS
JMS是异步的,松耦合的,消息通知机制(对象是在物理上被异步从网络的某个JVM 上直接移动到另一个JVM 上)
RMI
RMI一般都是同步的,紧耦合的,请求应答机制(对象是绑定在本地JVM 中,只有函数参数和返回值是通过网络传送的)
WebServer
Webservice专注于远程服务调用,和RMI类似,是同步的,紧耦合的,请求应答机制的。同时需要有复杂的转换
WebServer与HttpRequest
WebServer是基于HTTP实现的,效率上肯定是要低于HttpRequest。但是在复杂的应用中,例如对Soap协议的使用就是需要WebServer来完成。
HttpRequest对于单纯的取数据是可以的。用 XML 或者 JSON 单向从服务器取数据。而用WebServer的Soap协议是指,客户端调用服务器端上定义的方法(类似RPC)
小结
RPC 跨语言 跨平台
RMI 只支持java
JMS 只支持java
WebServer 跨语言 跨平台
Socket 跨语言 跨平台
HTTP 跨语言 跨平台
应用层:HTTP -> HTTP RPC WebServer
传输层:TCP/IP -> RMI SOCKET JMS