开局篇我们说了,RPC框架的四个核心内容
class Connection(object): ''' @RPC 连接。一般说来,都是socket连接,这里简化起见,直接本地变量实现。 ''' def __init__(self, sending_msg_list, recving_msg_list): ''' Constructor ''' self.sending_msg_list = sending_msg_list self.recving_msg_list = recving_msg_list def send(self, message): self.sending_msg_list.append(message) def recv(self): while len(self.recving_msg_list) == 0: time.sleep(0.01) return self.recving_msg_list.pop(0) def isClosed(self): return False
def request(self, req): # 全部简化处理,不考虑线程安全问题,不考虑异步 # 先是将RPC消息发送到服务端,然后服务端就会处理,并将结果发回到客户端,客户端这边接收处理结果。 # self.remote.procRequest(req) // 删除 self.conn.send(req) rsp = self.conn.recv() return rsp.result
# def procRequest(self, req): 调整参数列表,不再需要req def procRequest(self): # 循环读取并处理收到的客户端请求 while True: req = self.conn.recv() rsp = Response() rsp.id = req.id if req.command == 'sayHello': rsp.result = self.sayHello() elif req.command == 'whoAreYou': rsp.result = self.whoAreYou() else: raise Exception("unknown command") # return rsp # rsp也是通过connection最终传给client,而不是直接函数返回 self.conn.send(rsp)
slist = [] rlist = [] client = Client(Connection(slist, rlist)) server = Server(Connection(rlist, slist)) server.start()
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/crylearner/article/details/46952765