作者:mjadhu | 来源:互联网 | 2023-05-18 21:52
上面的两张原理图是一样的。从第一张原理图中能够看到rpc传输过程中应用的传输协定,从第二张原理图中sockets是在Kernel中,也就是在操作系统的内核中。
RPC 原理图
上面的两张原理图是一样的。从第一张原理图中能够看到 rpc 传输过程中应用的传输协定,从第二张原理图中 sockets
是在 Kernel
中,也就是在操作系统的内核中。
什么是RPC??
近程过程调用。一个服务器应用另一台服务器上的提供的服务或办法。
RPC 解决的什么问题??
让分布式或微服务零碎中不同服务之间的调用像本地调用一样简略。
为什么要应用 RPC??
因为两个服务器不是同一个操作系统,也不在一个内存空间,所以不能间接调用,须要通过网络来传递数据。
RPC 怎么解决通信??
在客户端和服务器之间建设 TCP 连贯,rpc 所有传输的数据都在 TCP 连贯中传输。连贯能够是按需连贯,调用完结后就断开,也能够是和长连贯,多个rpc 共享同一个连贯。
因为客户端和服务器是通过网络进行传输的,所以须要一个传输层,把函数id和序列化后的参数传递给服务器,并把序列化后的调用后果传回客户端。所以 TCP(大部分框架应用)和UDP都能够,也能够应用 http2(grpc应用)
RPC 怎么解决寻址的问题??
客户端上的利用通知 rpc 框架,服务器的主机/IP地址、端口号、办法名称,这样就能够实现调用。
网络协议是基于二进制的,内存中的参数的值须要序列化成二进制的模式。
服务器收到申请后,要对参数进行反序列化,把二进制变成内存中的参数,把参数复原成内存中的表达方式,而后找到对应的办法(寻址的一部分),进行本地调用,失去返回值。
服务器将返回值(序列化后)发给客户端,客户端收到返回值后,进行反序列化,而后传递给它下面的利用。
java的序列化形式:json。
RPC 和 socket 的区别??
socket是两个主机不同过程之间进行通信的形式。
rpc 是建设在 socket 之上的。rpc 通过 socket 实现通信, 也能够不必 socket,而应用其余的通信形式,比方命名管道(windows零碎中)。
RPC 和 HTTP 的分割和区别??
http 协定是应用层的协定。http 是实现 rpc 的一种形式。能够应用 http 协定,也能够应用 TCP / UDP 协定。