虽然现在非常火的RPC技术以SpringCloud和Dubbo(x)为主流,但是如果做接口调用,还是逃不了要用一些较传统的技术。前几天在做接口调用时恰巧用到了WebService的相关技术(8,9两节是真实的开发),正好都在这里写一写。
1. RPC相关基础
1.1 什么是RPC
----| RPC(Remote Procedure Call),远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。(来自百度百科)
----| RPC允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不需要显式编码这个远程调用的细节。(来自CSDN博客:https://blog.csdn.net/mindfloating/article/details/39473807)
1.2 RPC的特点
从上面的概念中,能大概总结出RPC的基本特点如下:
- 通过网络传输的
- 跨终端、跨平台的
- 基于请求-响应的
- 只调用过程,不需关注细节
1.3 RPC的基本原理
在底层去看,RPC其实就是将流从一台计算机传输到另外一台计算机,无论是基于传输协议(http、tcp、udp等等)和网络IO(bio、nio)来实现。
1.4 常见的RPC的调用技术(重点)
- SpringCloud(Spring的,基于Socket的,SOA架构的分布式框架)
- Dubbo(x)(阿里巴巴的,基于Socket的,SOA架构的分布式框架)
- WebService(跨语言的,基于SOAP协议,走xml数据或json数据)调用天气预报
- Hessian(跨语言的,基于Binary-RPC协议,走二进制数据)
- HttpClient(通常用于RESTful风格的调用,跨语言,基于http和json) 我估计是app调用客户端的
- jdk原生(HttpURLConnection)
- RMI
- JMS
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),即点对点和发布订阅模型。
参考:
https://blog.csdn.net/weixin_42672054/article/details/81708464#t5