rpc 的意思是,远程过程调用,那么一个服务器上的远程服务能否在浏览器端通过 ajax 调用么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
graysheeep
V2EX    程序员

rpc 的意思是,远程过程调用,那么一个服务器上的远程服务能否在浏览器端通过 ajax 调用么

  •  
  •   graysheeep 2018-03-26 17:23:09 +08:00 6089 次点击
    这是一个创建于 2758 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,看 demo 都是一个 server 端,一个 client 端,都是用同一种语言比如 go,或者 java 实现。那么如果用 java 起了一个 grpc 服务,能否在浏览器端用 ajax 进行调用呢?

    20 条回复    2018-03-27 13:32:26 +08:00
    noe132
        1
    noe132  
       2018-03-26 17:27:03 +08:00
    那就变成 restFUL api 了?
    zenxds
        2
    zenxds  
       2018-03-26 17:27:14 +08:00
    rpc 的协议一般不是 HTTP
    feverzsj
        3
    feverzsj  
       2018-03-26 17:30:59 +08:00
    可以,只要你客户端有支持 grpc 的库
    graysheeep
        4
    graysheeep  
    OP
       2018-03-26 17:33:34 +08:00
    @zenxds grpc 是 http2
    graysheeep
        5
    graysheeep  
    OP
       2018-03-26 17:34:19 +08:00
    @noe132 额是的。还是说有更科学的做法?
    hyperdak288
        7
    hyperdak288  
       2018-03-26 17:44:55 +08:00
    只要是 http 请求,你就能通过浏览器调用呀。

    RPC 一部分是 tcp 通信,另外一部分是直接 http 的,http 这种当然可以访问了。

    比如你看 spring boot 的 rpc 就都是 http,dubbo 的当当扩展版 dubbox 也是一样的支持 http
    forestyuan     8
    forestyuan  
       2018-03-26 17:45:19 +08:00
    可能还会牵涉到权限问题吧
    nine99
        9
    nine99  
       2018-03-26 18:10:17 +08:00
    wweir
        10
    wweir  
       2018-03-26 19:45:10 +08:00 via Android
    既然提到了 go,那就得说下,golang 标准库提供了 jsonrpc 包,并且提供了 httpServer 的 rpc 支持
    那么问题来了真有人用这玩意么?
    agagega
        11
    agagega  
       2018-03-26 20:30:17 +08:00   1
    提出 REST 的那个老哥,他在他博士论文的最后提到了 RESTful 和 RPC 机制的比较。两者的确很像,但是不能一概而论。RPC 在概念上就是把调用放到了两台主机上。而基于 HTTP 协议的 RESTful API 能够充分地利用 HTTP 协议的一系列基础设施,从缓存到 CDN 到代理什么的。RESTful 强调的是「资源」的概念,而不是简单的「返回值」。
    aa6563679
        12
    aa6563679  
       2018-03-26 21:53:04 +08:00 via iPhone
    浏览器要考虑跨域问题,不跨域的话 http 接口都能调
    bolide2005
        13
    bolide2005  
       2018-03-26 22:08:34 +08:00   4
    首先,rpc 使用 http 调用一点毛病也没有,rpc 本事并没有规定一定使用哪种通信协议实现,只是在一般情况下,我们选择使用 rpc 会有一定的性能上的考虑,那么这时候就会偏向于使用更高效的传输方式,比如使用 TCP 传输序列化后的二进制数据,而不是使用 http 传输字节码;
    其次,grpc 确实使用了 http2,golang 的 rpc 标准包里也有通过 http 实现通信的方法,但实质上,它们都只是借用了 http 来建立连接,当连接建立后,里面传输的都是序列化后的二进制,而转换数据到二进制的过程,是在 stub 函数中进行的;
    然后回到 rpc 的定义来看,其实 rpc 要解决的问题,就是怎么样可以像调用本地同进程的函数一样,调用一个 remote server ? rpc 给出的解决方案就是使用桩函数来屏蔽 remote 调用,在 client 本地直接调用桩函数;
    那么楼主的问题到这里就可以解决了:当然可以使用 ajax 来调用 rpc server,但需要生成 ajax (也就是 Javascript )可以直接使用的 stub function,在这个 function 里进行 remote 交互,至于是否在这里进行序列化,讲道理是应该的,这样能提高传输效率,但如果不做也没问题。只不过,要是这样的话,为何不直接使用 restul ?相比 rpc 调用,restful 不仅更容易调试,也容易进行权限和参数的控制,同时更加灵活。
    zhengxiaowai
        14
    zhengxiaowai  
       2018-03-26 22:10:43 +08:00
    RPC 一般采用二进制协议,当然用 HTTP 也没有错
    WispZhan
        15
    WispZhan  
       2018-03-26 22:54:03 +08:00
    RPC 的定义里,本身并没有限制语言以及具体传输协议实现方式。它是一个用于进程间通讯的调用过程,侧重点再过程。返回值只是其结果。

    因此,应用协议上用 HTTP 也好,用 Websocket 也罢;传输协议是 TCP 也好,是 UDP 也罢;数据载体是文本(ACSII)也好,是二进制也罢。从定义上是没有区分的。

    通常来说采用二进制流传输的 RPC 比较多,因为相比文本,流量更小,更容易解析,可读性差。但文本可读性更高,但体积较大。

    感觉现在 RPC 和 RPC 框架 的定义,有点模糊了。好像现在说 RPC 都是指 RPC 框架了。RPC 框架的好处是服务端与客户端定义的数据模型可以被框架统一生成。甚至于有的框架可以直接生产客户端代码……

    ---

    宗上所述,广义上,RESTful 也可以说成是 rpc。
    你这个应用场景,明显直接 ajax 掉 http 接口更方便…… gprc,难道你要用 js 操作字节么?
    如果你是 node 后端和 java 后端互调的话,RPC 或许好点。
    zachguo
        16
    zachguo  
       2018-03-27 02:34:55 +08:00 via Android
    dangyuluo
        17
    dangyuluo  
       2018-03-27 03:28:55 +08:00
    最近在研究 Mongoose OS 的 RPC,载体可以是 Websocket,MQTT,Http 或者是串口通讯。所以说 RPC 是广义的请求-相应,不仅只要服务端提供,可以以各种方式调用,当然你用 Ajax 也可以了。
    liukefeng2008
        18
    liukefeng2008  
       2018-03-27 09:57:14 +08:00
    jsonRPC 了解一下
    looplj
        19
    looplj  
       2018-03-27 11:20:13 +08:00
    可以啊,只要 RPC 库使用 HTTP 协议作为通讯方式就行
    lolizeppelin
        20
    lolizeppelin  
       2018-03-27 13:32:25 +08:00 via Android
    http 协议不适合执行需要一定时间返回的

    所以才不用 http 协议跑 rpc
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     920 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:18 PVG 05:18 LAX 14:18 JFK 17:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86