同步操作将从 Java精选/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
RPC和HTTP的存在重大不同的是:
HTTP请求是使用具有标准语义的通用的接口定向到资源的,这些语义能够被中间组件和提供服务的来源机器进行解释。结果是使得一个应用支持分层的转换(layers of transformation)和间接层(indirection),并且独立于消息的来源,这对于一个Internet规模、多个组织、无法控制的可伸缩性的信息系统来说,是非常有用的。
与之相比较,RPC的机制是根据语言的API(language API)来定义的,而不是根据基于网络的应用来定义的。
传输协议
RPC:可以基于TCP协议,也可以基于HTTP协议;
HTTP:基于HTTP协议。
传输效率
RPC:使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率;
HTTP:如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理。
性能消耗
RPC:可以基于thrift实现高效的二进制传输;
HTTP:大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能。
负载均衡
RPC:基本都自带了负载均衡策略;
HTTP:需要配置Nginx,HAProxy来实现。
服务治理
RPC:能做到自动通知,不影响上游;
HTTP:需要事先通知,修改Nginx/HAProxy配置。
总结
RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。
因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。
服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端,服务端已经收到FIN报文,但服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文,所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次。
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法:GET、POST和HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE和CONNECT方法。
方法 | 描述 | 是否包含主体 |
---|---|---|
GET | 请求指定的页面信息,并返回实体主体。 | 否 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 | 否 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 | 是 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 | 是 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 | 否 |
OPTIONS | 允许客户端查看服务器的性能。 | 否 |
DELETE | 请求服务器删除指定的页面。 | 否 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 | 否 |
HTTP协议设计的初衷本身就是请求/响应模式,这是规范决定的。不过在技术上是可以利用下层的TCP来进行全双工通信的。
在物理层上所传送的数据单位是比特。 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。
使其上面的数据链路层不必考虑网络的具体传输介质是什么。
“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
网络协议(Protocol)是一种特殊的软件,是计算机网络实现其功能的最基本机制。
网络协议的本质是规则,即各种硬件和软件必须遵循的共同守则。
网络协议并不是一套单独的软件,它融合于其他所有的软件系统中,因此可以说,协议在网络中无所不在。
网络协议遍及OSI通信模型的各个层次,从我们非常熟悉的TCP/IP、HTTP、FTP协议,到OSPF、IGP等协议,有上千种之多。
对于普通用户而言,不需要关心太多的底层通信协议,只需要了解其通信原理即可。
在实际管理中,底层通信协议一般会自动工作,不需要人工干预。但是对于第三层以上的协议,就经常需要人工干预,比如TCP/IP协议就需要人工配置才能正常工作。
局域网常用的三种通信协议分别是TCP/IP协议、NetBEUI协议和IPX/SPX协议。
Socket不算是一个协议,它是应用层与传输层间的一个抽象层。它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,以实现进程在网络中通信。
序列化的目的依赖为了进行网络传输,其一确保传的字节流能被反编译找到对应的类,其二为了方便本地硬盘存储。
RPC(Remote Protocal Call)服务为异步服务都是通过网络传输数据,因此需要序列化数据。
Java.sql.Date类继承java.util.Date类,但是并未实现序列化,因此作为参数不能在RPC服务中进行传输。
1、简化问题难度和复杂度。由于各层之间独立,我们可以分割大问题为小问题。
2、灵活性好。当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响。
3、易于实现和维护。
4、促进标准化工作。分开后,每层功能可以相对简单地被描述。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。