前端为什么基本上都使用 AJAX 请求,而不使用 RPC?

2020-03-27 13:45:22 +08:00
 zacharyjia

前两天试了一下 blazor,在 server-side 模式的时候,使用了 SignalR 传输数据。这样可以做到在页面里调用数据的时候,就像调用本地函数一样,而不用自己处理 http 请求,感觉写起来很简单省事儿了。

后面就想到,为什么现在前端基本上都是基于 ajax 做数据刷新,为什么不能使用 rpc 的方式呢?这样的话,一套接口写好,前端后端都可以自动生成对应的函数接口,直接调用多简单?特别是对于很多个人项目来说,不需要手动处理各种 http 请求了,不是更方便吗?实际传输可以基于 ajax 也可以走 websocket,可以做成库帮我们处理,岂不是更省心省力了?

那么这种方式为什么没有推广呢?有什么非常致命的缺点吗?

8134 次点击
所在节点    前端开发
59 条回复
qW7bo2FbzbC0
2020-03-27 14:06:24 +08:00
求给个 SignalR 的入手文章,英文懒得看。是用来 替代 websocket 的吗
Mithril
2020-03-27 14:12:03 +08:00
SignalR 底层也是 HTTP 啊,只不过给你封装了一下而已。跟 Ajax 完全不是一个层面的东西。
不同的框架基本也都会封装自己的 HTTP 库的。
wysnylc
2020-03-27 14:12:36 +08:00
笑死我了哈哈哈哈
eslizn
2020-03-27 14:13:46 +08:00
rpc 和 ajax 是一种东西么?
jugelizi
2020-03-27 14:19:12 +08:00
说了这么多 你就不能谷歌一下这两个区别吗
zacharyjia
2020-03-27 14:27:29 +08:00
@eslizn 当然不是一种东西了。我只是在说在前端使用这两种方式的区别啊,可能我说的有点歧义,我是想说目前手动请求 url 和使用 rpc,为什么不使用 rpc 呢?接口明确还有预定义的 stub 可以调用
zacharyjia
2020-03-27 14:28:31 +08:00
@jugelizi 两个的区别我认为我是知道的。您觉得我有什么错误,欢迎您来赐教。
rrfeng
2020-03-27 14:30:28 +08:00
如果你知道,你就不会问出这个问题。
zacharyjia
2020-03-27 14:32:02 +08:00
@rrfeng ??为什么?
toma77
2020-03-27 14:36:38 +08:00
我司后端有些微服务用了 grpc
我前端用 go 使用的时候没啥问题,但最近有些项目用了 react 的 ssr,在 node 里使用很容易内存暴增,蛋儿疼。。
sailei
2020-03-27 14:48:19 +08:00
浏览器应该不支持吧
zacharyjia
2020-03-27 14:51:30 +08:00
@sailei 可以的,有些 rpc 基于 http,可以这么搞。像楼上提到的 grpc,已经有专门的 grpc-web 的库做这个了。
sanggao
2020-03-27 14:55:31 +08:00
感觉楼主就是来搞笑的,可能没做过什么项目
sailei
2020-03-27 14:58:18 +08:00
@zacharyjia 那是用 nginx 等代理工具 转成 http 协议了!
rrfeng
2020-03-27 14:58:26 +08:00
ajax = Asynchronous JavaScript and XML (“应用层”)
rpc = Remote procedure call (“传输层”)

ajax over rpc 可以吗?当然可以。
zacharyjia
2020-03-27 15:00:02 +08:00
@sailei 不是啊,grpc 本身就是基于 http/2 的
otakustay
2020-03-27 15:01:35 +08:00
按楼主的意思是,他希望以“调用一个远程方法”的形式去理解一个一次远程的调用,而不是 URL+数据的组合
我觉得这个说法非常合理,是很严谨的工程论断,楼上说搞笑的还是省省
前端即便去用“方法”的粒度做远程调用的封装,往往也是人工做的,比如把各种 API 包装成函数,我想这里一个很大的原因在于服务发现,第一前端对服务发现这个事没有很好的理解和掌控力,第二服务发现本身是影响启动速度的,而前端并不是后端服务那种一次启动跑几天几个月的,前端对启动速度的要求是毫秒级的,没什么时间给服务发现去耽搁
zacharyjia
2020-03-27 15:03:19 +08:00
@rrfeng 如果你说的 应用层和传输层 是指网络的五层架构里的应用层和传输层的话,那我觉得你的理解才是错的。rpc 可以基于 tcp,可以基于 http 等,它再怎么低也不能低成一个跟 tcp 和 udp 同层的传输层协议去。
rrfeng
2020-03-27 15:09:53 +08:00
@zacharyjia
没看见打了引号吗?

ajax 意思是『可以异步请求数据然后更新页面上的内容』,至于你怎么请求数据,你可以调用 http 或者 rpc 甚至等待键盘输入,那不是 ajax 描述的事情。

上面笑得都是笑你基本概念没搞清楚。ajax 和 rpc 半毛钱关系都没有,怎么替代?
rrfeng
2020-03-27 15:11:10 +08:00
你把 ajax 和 ajax+http 搞混了。

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

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

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

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

© 2021 V2EX