如题,看 demo 都是一个 server 端,一个 client 端,都是用同一种语言比如 go,或者 java 实现。那么如果用 java 起了一个 grpc 服务,能否在浏览器端用 ajax 进行调用呢?
如题,看 demo 都是一个 server 端,一个 client 端,都是用同一种语言比如 go,或者 java 实现。那么如果用 java 起了一个 grpc 服务,能否在浏览器端用 ajax 进行调用呢?
1
noe132 Mar 26, 2018
那就变成 restFUL api 了?
|
2
zenxds Mar 26, 2018
rpc 的协议一般不是 HTTP
|
3
feverzsj Mar 26, 2018
可以,只要你客户端有支持 grpc 的库
|
4
graysheeep OP @zenxds grpc 是 http2
|
5
graysheeep OP @noe132 额是的。还是说有更科学的做法?
|
7
hyperdak288 Mar 26, 2018
只要是 http 请求,你就能通过浏览器调用呀。
RPC 一部分是 tcp 通信,另外一部分是直接 http 的,http 这种当然可以访问了。 比如你看 spring boot 的 rpc 就都是 http,dubbo 的当当扩展版 dubbox 也是一样的支持 http |
8
forestyuan Mar 26, 2018
可能还会牵涉到权限问题吧
|
9
nine99 Mar 26, 2018
🙄
|
10
wweir Mar 26, 2018 via Android
既然提到了 go,那就得说下,golang 标准库提供了 jsonrpc 包,并且提供了 httpServer 的 rpc 支持
那么问题来了真有人用这玩意么? |
11
agagega Mar 26, 2018 提出 REST 的那个老哥,他在他博士论文的最后提到了 RESTful 和 RPC 机制的比较。两者的确很像,但是不能一概而论。RPC 在概念上就是把调用放到了两台主机上。而基于 HTTP 协议的 RESTful API 能够充分地利用 HTTP 协议的一系列基础设施,从缓存到 CDN 到代理什么的。RESTful 强调的是「资源」的概念,而不是简单的「返回值」。
|
12
aa6563679 Mar 26, 2018 via iPhone
浏览器要考虑跨域问题,不跨域的话 http 接口都能调
|
13
bolide2005 Mar 26, 2018 首先,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 不仅更容易调试,也容易进行权限和参数的控制,同时更加灵活。 |
14
zhengxiaowai Mar 26, 2018
RPC 一般采用二进制协议,当然用 HTTP 也没有错
|
15
WispZhan Mar 26, 2018
RPC 的定义里,本身并没有限制语言以及具体传输协议实现方式。它是一个用于进程间通讯的调用过程,侧重点再过程。返回值只是其结果。
因此,应用协议上用 HTTP 也好,用 Websocket 也罢;传输协议是 TCP 也好,是 UDP 也罢;数据载体是文本(ACSII)也好,是二进制也罢。从定义上是没有区分的。 通常来说采用二进制流传输的 RPC 比较多,因为相比文本,流量更小,更容易解析,可读性差。但文本可读性更高,但体积较大。 感觉现在 RPC 和 RPC 框架 的定义,有点模糊了。好像现在说 RPC 都是指 RPC 框架了。RPC 框架的好处是服务端与客户端定义的数据模型可以被框架统一生成。甚至于有的框架可以直接生产客户端代码…… --- 宗上所述,广义上,RESTful 也可以说成是 rpc。 你这个应用场景,明显直接 ajax 掉 http 接口更方便…… gprc,难道你要用 js 操作字节么? 如果你是 node 后端和 java 后端互调的话,RPC 或许好点。 |
16
zachguo Mar 27, 2018 via Android
|
17
dangyuluo Mar 27, 2018
最近在研究 Mongoose OS 的 RPC,载体可以是 Websocket,MQTT,Http 或者是串口通讯。所以说 RPC 是广义的请求-相应,不仅只要服务端提供,可以以各种方式调用,当然你用 Ajax 也可以了。
|
18
liukefeng2008 Mar 27, 2018
jsonRPC 了解一下
|
19
looplj Mar 27, 2018
可以啊,只要 RPC 库使用 HTTP 协议作为通讯方式就行
|
20
lolizeppelin Mar 27, 2018 via Android
http 协议不适合执行需要一定时间返回的
所以才不用 http 协议跑 rpc |