[svc]简单理解什么是rpc调用?跟restapi有何区别?

时间:2023-03-08 21:44:17

什么是rpc调用

  • restapi调用方式是对数据的crud. 常见的我们写flash写个api,或者借助django drf写个标准的resetapi,一个url可以借助httpget post put delete实现数据的crud. 属于应用层http调用了

那个文章说:

REST表示的是描述性状态传递(representational state transfer),REST整个就是关于 客户端和服务端之间的关系的,其中服务端要提供格式简单的描述性数据,常用的是JSON和XML。

不知道和osi7层的表示层有关系没

[svc]简单理解什么是rpc调用?跟restapi有何区别?

找了个django-microservice例子

订单服务调用邮件服务

[svc]简单理解什么是rpc调用?跟restapi有何区别?

邮件服务是通过url暴漏的, 通过post方式收到参数,发出邮件

[svc]简单理解什么是rpc调用?跟restapi有何区别?

  • rpc调用方式: 简单理解为主机B可以调用主机A的函数. 属于4层tcp调用,效率更高
hostA  hostB
f1 f2
tcp:A:port f1 参数

python的rdc协议框架-zerorpc

注: 不需要安装zeromq

import zerorpc
class Cooler(object):
""" Various convenience methods to make things cooler. """
def add_man(self, sentence):
""" End a sentence with ", man!" to make it sound cooler, and
return the result. """
return sentence + ", man!"
def add_42(self, n):
""" Add 42 to an integer argument to make it cooler, and return the
result. """
return n + 42
def boat(self, sentence):
""" Replace a sentence with "I'm on a boat!", and return that,
because it's cooler. """
return "I'm on a boat!"
s = zerorpc.Server(Cooler())
s.bind("tcp://0.0.0.0:4242")
s.run()

模拟远程调用

$ zerorpc -j tcp://localhost:4242 add_42 1
43

grpc调用

[svc]简单理解什么是rpc调用?跟restapi有何区别?

服务端写了个类: 暴露了个端口,将这个类通过tcp抛出去

[svc]简单理解什么是rpc调用?跟restapi有何区别?

客户端访问服务端的函数

[svc]简单理解什么是rpc调用?跟restapi有何区别?