开局篇我们说了,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 Falsedef 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