远程过程调用,简称为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()
Mikel
