最近由于项目需要,就简单看了下gRPC入门,使用起来挺简单的。这里就顺便记录一下,便于后面回顾。
RPC是什么
说到RPC(Remote Process Communication,远程过程调用)就不得不说到进程间通信(Inter-process Communication,简称IPC),IPC是指多个进程之间传送数据或信号的一些技术或方法。
而IPC又分为本地过程调用(LPC)和远程过程调用(RPC),这两者的区别就是 LPC的调用可以共享内存空间,比较方便;而RPC的调用双方则不在同一个主机中,无法像LPC那样方便。
说到底,RPC就是在本地来 调用远程的方法。而RPC框架要做的就是 让远程调用 像本地调用一样方便,而这个调用过程则是RPC框架需要做的工作。这个工作涉及到大概 两个方面:序列化协议和 传输协议。
1、常见的序列化协议有:
基于文本(text)的:XML、JSON
基于二进制(binary)的: Protocol Buffer、Thrift等2、常见的传输协议有:
传输层的: TCP(基于Socket)、UDP
应用层的:HTTP1.1、HTTP2.0
而RPC框架中,通常使用的序列化协议包括Protocol Buffer、Thrift等,传输协议则常用TCP、HTTP2.0等。
更多的内容可以参考博客:
gRPC框架
上面简单介绍了RPC机制的作用,现如今已经出现了许多优秀的RPC框架,比如:gRPC、Dubbo、Thrift等。这些框架在 序列化协议和传输协议两部分都有不同的选择,各有优劣。不过,没必要全部都去学习一遍,可以简单尝试一种,大概了解运行机制即可。
下面是以gRPC的简单使用为例,了解gRPC的运行过程和用法。
gRPC使用的序列化协议是 Protocol Buffer,使用的传输协议是 HTTP2.0协议。
需要清楚的是,
gRPC的通信方式需要先确定好proto文件,这个proto文件中定义了远程api的具体服务接口、api方法的参数类型/返回值类型;
然后,将该proto文件编译为 java类文件,这些类文件包含的就是 client端 和 server端都遵循的 远程调用api的定义内容。
接着,client端 和 serve