关于http和rpc的区别

最近用了谷歌的grpc,所以对rpc和http有一点疑惑,感觉这两个东西功能上是一样的,rpc某个服务监听某一个方法,客户端调用这个方法,返回相应的数据,
和http监听某个方法的路由 返回相应的数据好像没有本质上的区别啊,
求哪位前辈给细致的或浅显的大致的讲解一下这俩的区别 和所用的场景

阅读 15.7k
5 个回答

被故意忽略的那个答案说的很对。

rpc不仅仅可以用http协议实现。

http只是rpc的载体、传输协议。但是宽泛起来也可以说,是rpc的一种实现。

json(jsonrpc),xml(xmlrpc),protobuf,等都只是一种序列化方法(codec)。

http,tcp,mq等都是传输协议。

rpc中,jsonrpc和xmlrpc一般认为是使用json和xml作为序列化方法,使用http作为传输媒介的rpc协议。

grpc协议,序列化方法是protobuf,传输协议基于HTTP2。

RPC不仅仅可以用HTTP协议实现

--------以上为原答案-----------------

不知道怎么就被忽略了,好奇问一下SF的答案忽略规则到底是怎么样的,谁来判断答非所问?

--------吐槽结束---------------------

RPC意思就是远程过程调用,并不涉及任何实现细节,HTTP协议是一个有规范描述的通信协议,二者并非是同一层次的概念,没有可比性。

RPC可以承载在HTTP上,也可以自己自创协议实现,只是为了省事大家很多时候倾向于现成且成熟的协议。

HTTP属于应用层吧,题主认为他们相同在于感觉他们的套路是一样的,都是提交请求收到响应,本质不都是TCP吗。。
但是不同机器上的应用互相调戏的时候,RPC直接奔放,HTTP还得穿衣服脱衣服,你选择哪个呢。。。。。。。。。。
终端没跟头端在一起的时候发HTTP暗送秋波,后台的程序都在一起好久了那就rpc吧。。。。。。。。。。。。。。。

这样的答案会被折叠吗。

打个比方我用nodejs开发了一个微信支付模块;然后我的webapp可以通过调用 这个模块的接口就可以实现 微信支付了,也没有用到rpc啊 当然强制在 中间加一层rpc也可以但是没有意义啊;而且 微信支付某块通过 修改参数后,就可改成另一个商户可用的微信支付模块;很容易服用;

我的理解是这样的;比方说我的webapp的登录功能,我可以把它拆出来,用grpc通过接口形式暴露出来,链接wepapp的数据库;
等到开发webapp2的时候,我拿过这个登录模块来修改数据库配置后直接就可以通用了;使程序模块化,高度复用;有人会说用http也可以实现呢;怎么说呢:
grpc的通讯协议比http更稳定更快;而且对外不暴露。明白了

HTTP你可以认为是RPC的一个子集,HTTP本身也是一种RPC,只不过这种远程调用的协议方式被推广了开来并且被广泛支持了。

宣传栏