bolide2005
2018-03-26 22:08:34 +08:00
首先,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 不仅更容易调试,也容易进行权限和参数的控制,同时更加灵活。