gRPC 和普通 HTTP API 哪个更适合 APP 客户端与服务器通信?为什么大部分 APP 都还在使用传统 HTTP API?

129 天前
drymonfidelia  drymonfidelia
5274 次点击
所在节点   程序员  程序员
68 条回复
lambdaq
lambdaq
129 天前
这什么沙雕问题。我来给你个沙雕回答吧。最适合的是用 h2 传输 pb ,然后 pb 就定义一个 string 字段用来传 json 字符串。
kw8023cn
kw8023cn
129 天前
@drymonfidelia #10 如果你的目标用户,地理位置都是山区的话,那确实可以考虑
tbxark
tbxark
129 天前
http 方便抓包调试,方便给 web 和小程序服务。grpc 还是适合微服务之间通信。
f7014367google
f7014367google
129 天前
如果有服务需要扩容,请问阁下该怎么使用 gRPC 进行负载均衡呢?
willchen
willchen
129 天前
@f7014367google 这不是问题吧 nginx 也早支持了
julyclyde
julyclyde
129 天前
@drymonfidelia 客户都弱网了,还有啥价值啊……

以及,为啥要 base64 ? http 难道不支持 binary 么?
julyclyde
julyclyde
129 天前
@lambdaq 我还以为用 json 代替 pb 作为编码层呢……你这个太狠了
lambdaq
lambdaq
129 天前
@julyclyde 然后把 图片 base64 到 json 里传输~
minoic
minoic
129 天前
@hxzhouh1 grpc-web 是为了适配浏览器环境,其实约等于是 grpc-js ,支持各种工作环境反而更方便它替代一些 http 场景。
jeesk
jeesk
129 天前
@kk2syc 扯淡想要性能还玩 grpc ?
kaf
kaf
129 天前
grpc 基于 http2 封装的,而且现在 http2 基本也普及了,直接用 http2 也没什么差别啊,更不要说满大街前端一辈子都是写 json
sampeng
sampeng
129 天前
你可以不用啊。又没人强迫你。你去怼你同事和老大去啊。。。
hxzhouh1
hxzhouh1
129 天前
@minoic 所以咯,GRPC 是有缺陷的,需要一些其他组件来支持。
inhzus
inhzus
129 天前
前司用的就是类似的协议,性能有提升吗:客户端几乎没有,接入层的提升很大。弱网环境相较竞品,快,真的快
大部分 App 有这个必要吗?没必要。
guoooo00oohao
guoooo00oohao
129 天前
还是要看场景,大部分情况下 http 就够用了,生态成熟比如开发,调试,debug ,生产环境的网关,trace 都有很多现成的方案。

grpc 有 encoding 虽然大部分情况下性能比 http 要好一些,但是不容易 debug 。
kk2syc
kk2syc
128 天前
@jeesk 扯淡的说就是提升性能,当然你也可以自己搞一套所谓的压缩复用
f7014367google
f7014367google
128 天前
@willchen 这不就是"又"引入了额外的组件吗?比如跑在 k8s 上的微服务,用了 gRPC ,"又"需要额外引入一个"nginx ingress"。
KiraMaple
KiraMaple
128 天前
我个人认为 gRPC 的着重点是 RPC 上,可以在微服务/CS 之间像调用本地函数一样调用其他服务的函数,这能极大提升开发效率,但也需要通信的双方协议对齐,这是 RPC 的特点。因为 gRPC 最终打包接口采用的 protobuf ,一个非常优秀的序列化反序列化方案,这能带来更低的流量和更好的性能。也因为采用了 protobuf ,让浏览器上开发调试的时候变得更加复杂,比如 xml/json 那么清晰。不过 protobuf 带来的好处其实 i 也可以依托其他高效的序列化方案来处理。不过 gRPC 很多特性是依托较新浏览器特性才能支持的,所以它对浏览器的支持有一定要求。
相反在微服务之间的场景几乎没有上述所说的诸多缺点,所以现阶段 gRPC 更多还是用在微服务之间的调用或者 BS 模型的产品。
skipper1314
skipper1314
128 天前
1 、还是 HTTP 更普及,而且不容易被 QOS
2 、HTTP 调试抓包和分析比 gRPC 更方便
3 、gRPC 确实有很多优化,高效的全双工流式传输等等。但是,就像可读性相比性能,肯定可读性和易用性更优先。
jeesk
jeesk
128 天前
@KiraMaple grpc 和浏览器有啥关系? 不过 gRPC 很多特性是依托较新浏览器特性才能支持的 ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1083393

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX