python实现RPC(远程过程调用)

发布时间 2023-08-25 16:44:14作者: yedayang

python实现RPC(远程过程调用)

# 远程过程调用
-1 借助于rabbitmq 可以跨语言
-2 SimpleXMLRPCServer内置的
-3 zerorpc
-4 grpc 可以跨语言

1.1 SimpleXMLRPCServer 自带的

### 服务端
from xmlrpc.server import SimpleXMLRPCServer
# 通信使用xml格式
class RPCServer(object):
    def add(self,a,b):


        return a+b

# SimpleXMLRPCServer
server = SimpleXMLRPCServer(('localhost', 4242), allow_none=True)
server.register_introspection_functions()
server.register_instance(RPCServer())
server.serve_forever()


#### 客户端
import time
from xmlrpc.client import ServerProxy

#SimpleXMLRPCServer 底层使用了http协议所以速度会稍微慢一些

1.2zerorpc

# 基于 ZeroMQ 通信库的 RPC(远程过程调用)框架

### 服务端
import zerorpc

class RPCServer(object):
    def add(self,a,b):
        print('a+b',a+b)
        return a+b
# zerorpc
s = zerorpc.Server(RPCServer())
s.bind('tcp://0.0.0.0:4243')
s.run()



#### 客户端
import zerorpc
import time


# zerorpc
def zerorpc_client():
    print('zerorpc client')
    c = zerorpc.Client()
    c.connect('tcp://127.0.0.1:4243')

    print(c.add(88, 77))


if __name__ == '__main__':
    zerorpc_client()

rpc和http的关系

# rpc不是一种协议,它是一个概念:远程调用的概念,中间通过网络,底层可以基于tcp,也可以基于http,基于tcp自定义协议
#2.有的rpc框架用了http协议
#3 有的rpc框架直接使用tcp协议

json和xml

# json 和 xml 是两种常见的数据交换格式
区别:
	1.数据格式:json用键值对的形式来表示数据,xml用标签加元素的嵌套结构来表示元素,相比之下json更加简洁紧凑
    2.相对于xml,json的可读性较差。因为xml使用标签和结构表示数据。
    3.xml扩展性高于json
    4.数据类型:json支持字符串、数字、布尔值、数组和对象。xml默认存文本需要开发者自行解析和转换数据类型
    5.json因为更简洁和紧凑,解析和编码速度快。