开局篇我们说了,RPC框架的四个核心内容
class Client(object):
def __init__(self):
self.remote = None
##
# 内部是委托给远程remote对象来获取结果。
def sayHello(self):
if self.remote: return self.remote.sayHello()
else : return None
class Server(object):
def __init__(self):
pass
def sayHello(self):
return 'Hello World'
if __name__ == '__main__':
server = Server()
client = Client()
client.remote = server
print(client.sayHello())class Request(object):
'''
@RPC请求,包含命令id和请求内容两部分。这个实现,与具体的RPC协议相关。
@这里是简化起见,采用python自身的字典作为其协议的数据结构
'''
def __init__(self):
'''
Constructor
'''
self.id = 0 #id的作用在于将Request和Response建立绑定关系.在异步调用时就有用
self.command = None #sayHello
def __str__(self):
return ''.join(('id: ', str(self.id), ' command: ', str(self.command)))class Response(object):
'''
@RPC回复。 包含答复id和执行结果两部分内容。其中答复id与对应的请求id一致。
@简单起见,协议的实现使用python自家的字典
'''
def __init__(self):
'''
Constructor
'''
self.id = 0
self.result = None
def __str__(self):
return ''.join(('id: ', str(self.id), ' result: ', str(self.result))) def sayHello(self):
req = Request() // 构建一个RPC请求消息
req.id = 1
req.command = 'sayHello'
return self.request(req)
def request(self, req):
rsp = self.remote.procRequest(req) // 将请求消息发送给远程服务端。但因为传输层这里还没实现,所以先暂时还是直接调用远端接口
return rsp.resultdef procRequest(self,req):
rsp = Response()
rsp.id = req.id
if req.command == 'sayHello':
rsp.result = self.sayHello()
else:
raise Exception("unknown command")
return rsp版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/crylearner/article/details/46899083