rpc思想 和 restful规范(http协议是典型的具体实现)
rpc
rpc允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的程序,就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节,直接调用方法即可)
RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统
而在一个典型 RPC 的使用场景中,包含了服务发现、负载、容错、网络传输、序列化等组件
流程
客户端调用客户端stub(client stub)。这个调用是在本地,并将调用参数push到栈(stack)中。
客户端stub(client stub)将这些参数包装,并通过系统调用发送到服务端机器。打包的过程叫 marshalling。(常见方式:XML、JSON、二进制编码)
客户端本地操作系统发送信息至服务器。(RPC 可以基于 TCP/UDP,也可以基于 HTTP 协议进行传输。可通过自定义TCP协议或HTTP传输)
服务器系统将信息传送至服务端stub(server stub)
服务端stub(server stub)解析信息。该过程叫 unmarshalling
服务端stub(server stub)调用程序,并通过类似的方式返回给客户端
某些程度上和om2sdk类似。om2client可以认为是简单的client stub
对比
从使用上来看,HTTP 接口只关注服务提供方,对于客户端怎么调用并不关心。接口只要保证有客户端调用时,返回对应的数据就行了。而RPC则要求客户端接口保持和服务端的一致
-
REST是面向资源的,是服务端把方法写好,而对外暴露的是接口;客户端并不知道接口背后的具体方法,只需要请求该接口。客户端想获取资源,所以发起HTTP请求,而服务端接收到请求后根据URI经过一系列的路由才定位到方法上面去
-
RPC面向方法的,是服务端提供好方法给客户端调用,客户端需要知道服务端的具体类和具体方法,然后像调用本地方法一样直接调用它
网友评论