[svc]简单理解什么是rpc调用?跟restapi有何区别?
什么是rpc调用
- restapi调用方式是对数据的crud. 常见的我们写flash写个api,或者借助django drf写个标准的resetapi,一个url可以借助httpget post put delete实现数据的crud. 属于应用层http调用了
那个文章说:
REST表示的是描述性状态传递(representational state transfer),REST整个就是关于 客户端和服务端之间的关系的,其中服务端要提供格式简单的描述性数据,常用的是JSON和XML。
不知道和osi7层的表示层有关系没
找了个django-microservice例子
订单服务调用邮件服务
邮件服务是通过url暴漏的, 通过post方式收到参数,发出邮件
- 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调用
服务端写了个类: 暴露了个端口,将这个类通过tcp抛出去
客户端访问服务端的函数