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

2024-10-24 22:46:54 +08:00
 drymonfidelia
6158 次点击
所在节点    程序员
68 条回复
sampeng
2024-10-25 15:33:28 +08:00
这是技术问题么?你先说服你同事吧
joyypjh
2024-10-25 15:41:57 +08:00
弱网情况下 gRPC 很炸裂,没有细究原因,直接绕坑走
guanzhangzhang
2024-10-25 16:15:47 +08:00
主要是很多业务的量不是很大,导致对性能追求不大
其次世界都是草台班子,开发人员大多是 curd , 只会 http 这种更广泛的,消息协议最广泛的就是 json 了。

我们组的前后端都会写的开发,连 protobuf 都不知道。。。反倒是那些自己接项目的全栈开发基本都知道。然后我看他负责的项目有用到 websocket ,我就好奇用 json 的话,websocket 没有 http url 路由概念,不同结构的消息类型怎么处理的,他说开多个 websocket 连接,每个连接 websocket server 一个 url 建立一种 json 格式 ,我说得亏你没有写 web 游戏开发,不然各种不同的消息类型,每个用户开 100 个 websocket 链接吗
chaleaochexist
2024-10-25 16:18:07 +08:00
@KiraMaple
"像调用本地函数一样调用其他服务的函数"
请教, GRPC 提供了哪个 api 哪个 功能 让他调用其他服务的函数像是在调用本地函数?
http 为什么不能?
julyclyde
2024-10-25 16:25:53 +08:00
@tool2dx 我其实很担心,proto 文件暴露给前端,被客户下载走,万一其中不怀好意的客户想要分析接口,proto 文件就有点过于详尽了
beaspiring
2024-10-25 16:27:44 +08:00
你的问题更应该是 gRPC vs REST API, 而不是 gRPC vs HTTP API

gRPC 的好处:
1. 类型安全,调用的参数和 method 本身都是,不可能搞错
2. 支持输入和输出参数的 version ,比如加一个新字段
3. 网络传输需要的带宽小,client/server 的数据解析更快

REST AP 用的人更多,理由估计是(从大到小):
1. 出来更早,更普及
2. 更容易学和用
3. 用 gRPC 的好处不明显
kiracyan
2024-10-25 16:32:01 +08:00
不是一个应用场景
tojike
2024-10-25 16:32:57 +08:00
我们是草台班子,不怕你们笑话,我们服务器内网也用的 http
Jinnrry
2024-10-25 16:47:48 +08:00
@tojike 我也不怕你笑话,我们服务器内网,用 grpc 的人离职以后,其他人接手,立马换成 http
julyclyde
2024-10-25 17:00:46 +08:00
@Jinnrry http 好歹有个 curl ; grpc 要做客户端还得先弄个 proto 文件,或者开 discovery……
grzhan
2024-10-25 17:43:53 +08:00
感觉大的可能的收益是在二进制序列化协议( protobuf ),一般外部接口感觉是在传输 payload 比较大的时候可能会考虑使用,类似 Prometheus Remote Write API , 一次请求可能是几 MB 或者几十 MB 的写入,Protobuf + Snappy 压缩,也可以像 VictoriaMetrics 使用 zstd 进行压缩,当然传输协议其实还是 HTTP 。

我不是做移动端的,看了下 Android 的文档也确实有 gRPC 方案的文档介绍( https://developer.android.com/guide/topics/connectivity/grpc ),但也不是主推的样子。加上上面很多老板提到的调试成本、学习门槛,以及弱网下 grpc 可能会存在坑,导致看下来 grpc 在客户端通信通用场景的优势并不明显。
needhourger
2024-10-25 17:59:19 +08:00
@guanzhangzhang websocket 现在也有封装好的 socketio 协议, 可以实现在单个 websocket 上定义专有的事件,以及区分 namespace,类似 http url 的概念。
wysnxzm
2024-10-25 18:03:09 +08:00
guanzhangzhang
2024-10-25 18:07:04 +08:00
@needhourger 我知道,同事们这方面知识非常匮乏,说到 socketio ,socketio 社区的 golang 库还是路人写的,而且该库三周之前 archive 了
Jet
2024-10-25 18:12:45 +08:00
看着评论区不停跳跃的反问句,其浓度之高,不由自主的乐了起来 😁
RightHand
2024-10-25 18:54:29 +08:00
补充一点吧,说性能的,性能再好你有 tcp ,udp 强?在 app 中,追求性能那肯定选这两个,追求通用性肯定 http ,grpc 要啥没啥
jeesk
2024-10-26 11:48:00 +08:00
大部分人以为用了新技术就觉得自己比别人牛了?

比如大家用 electron , 你用 tarui , 我技术比你牛。

大家用 http ,你用 protobuf 又觉得比别人牛了。


反正我会点新技术, 吊吊库, 就是比同事🐂。
jeesk
2024-10-26 11:55:16 +08:00
因为有时间,你的同事一定会学会 Tauri , 学会 protobuf ,学会 grpc ,那学会了是不是和你一样了?
fj24911
2024-10-26 12:25:04 +08:00
引入 gprc 带来的代码、运维的复杂度,相较 http 的性能提升其实可以忽略不记。
drymonfidelia
2024-10-26 13:26:57 +08:00
@jeesk grpc 难不难用不确定,tauri 是真的垃圾

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

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

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

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

© 2021 V2EX