远程过程调用,简称为RPC,是一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序,而无需额外地为这个交互作用编程。 RPC与传统的HTTP对比 优点: 1. 传输效率高(二进制传
来源: RPC原理及其调用过程 – Harvard_Fly – 博客园
1 import socket 2 3 class Channel(object): 4 """ 5 与客户端建立网络连接 6 """ 7 8 def __init__(self, host, port): 9 self.host = host # 服务器地址 10 self.port = port # 服务器端口 11 12 def get_connection(self): 13 """ 14 获取一个tcp连接 15 """ 16 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 17 sock.connect((self.host, self.port)) 18 return sock 19 20 21 class Server(object): 22 def __init__(self, host, port, handlers): 23 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 24 self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 25 self.host = host 26 self.port = port 27 self.sock.bind((host, port)) 28 self.handlers = handlers 29 30 def serve(self): 31 """ 32 开启服务器运行,提供RPC服务 33 """ 34 # 开启服务监听,等待客户端连接 35 self.sock.listen(128) 36 print("开始监听") 37 while True: 38 # 接收客户端的连接请求 39 conn, addr = self.sock.accept() 40 print("建立连接{}".format(str(addr))) 41 42 # 创建ServerStub对象,完成客户端具体的RPC调用 43 stub = ServerStub(conn, self.handlers) 44 try: 45 while True: 46 stub.process() 47 except EOFError: 48 # 表示客户端关闭了连接 49 print("客户端关闭连接") 50 # 关闭服务端连接 51 conn.close()