看了一下rpc框架的作用,是可以实现远程调用,可以基于http协议,也可以用别的协议。
这里的远程调用,指的应该是后端服务A和后端服务B互调吧(虽然有些地方会把调用方称作客户端,但其实还是服务端和服务端互调)。
那如果前端,就比如浏览器端,想通过post或者get方式去调后端的接口,也能称之为RPC方式吗?应该不是吧,充其量就是基于http的restful接口调用吧。而且前端(浏览器端)想去调后端接口,只能通过http协议,如果那些实现了别的协议的rpc框架,根本没法处理http请求吧
不知道我的理解对不对
HTTP是通信协议,RPC是一种开发方式,他可以基于HTTP协议(比如gRPC),也可以基于其他协议,比如更基础的TCP
通信协议的选择只是RPC实现中的一小部分,更重要的一部分是编码协议。比如json/xml属于文本编码,还有二进制字节编码,比如protoful,thrift。http对比tcp,最诟病的就是多余的头信息,而且还是使用的文本编码,造成整个数据包体积过大。不过据说http2改进很多,修改为二进制编码了,还支持多路复用,gRPC就是基于http2实现的。
至于restful,其实他本身是一套将资源对象化的设计标准,不过目前都作为技术实现再用,本身又分为严格的和非严格的。从目前上来说restful接口可以认为是一种基于http使用json编码的RPC实现,但还是本身restful是设计规范,更多的是约束资源的访问获取手段,不应当用于复杂的函数调用。
最后前后端,目前javascript也有json-RPC,ajax-RPC一类的更专注于函数调用的RPC实现,可以基于HTTP,也可以基于websocket,如果目的是函数调用,你可以试用一下,会比使用restful舒服很多。