首页 > 图灵资讯 > java面试题>正文
能说下HTTP和RPC的区别吗?
2024-03-19 13:12:21
严格来讲,HTTP和不是一个层面的东西:
HTTP和RPC
- HTTP(Hypertext Transfer Protocol)是一种应用层协议,主要强调的是网络通信;
- RPC(Remote Procedure Call,远程过程调用)是一种用于分布式系统之间通信的协议,强调的是服务之间的远程调用。
一些RPC框架比如gRPC,底层传输协议其实也是用的HTTP2,包括Dubbo3,也兼容了gRPC,使用了HTTP2作为传输层的一层协议。
如果硬要说区别的话,如下:
HTTP |
RPC |
|
定义 |
HTTP(超文本传输协议)是一种用于传输超文本的协议。 |
RPC(远程过程调用)是一种用于实现分布式系统中不同节点之间通信的协议。 |
通信方式 |
基于请求-响应模型,客户端发送请求,服务器返回响应。 |
基于方法调用模型,客户端调用远程方法并等待结果。 |
传输协议 |
基于TCP协议,可使用其他传输层协议如TLS/SSL进行安全加密。 |
可以使用多种传输协议,如TCP、UDP等。 |
数据格式 |
基于文本,常用的数据格式有JSON、XML等。 |
可以使用各种数据格式,如二进制、JSON、Protocol Buffers等。 |
接口定义 |
使用RESTful风格的接口进行定义,常用的方法有GET、POST、PUT、DELETE等。 |
使用IDL(接口定义语言)进行接口定义,如Protocol Buffers、Thrift等。 |
跨语言性 |
支持跨语言通信,可以使用HTTP作为通信协议实现不同语言之间的通信。 |
支持跨语言通信,可以使用IDL生成不同语言的客户端和服务端代码。 |
灵活性 |
更加灵活,适用于不同类型的应用场景,如Web开发、API调用等。 |
更加高效,适用于需要高性能和低延迟的分布式系统。 |
在微服务体系里,基于HTTP风格的远程调用通常使用框架如Feign来实现,基于RPC的远程调用通常使用框架如Dubbo来实现。