标签:服务端 remote proc rac 异步 height __init__ send 代码
开局篇我们说了,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())
于是我们的任务就是通过一点点的代码改动,为其引入RPC框架。
俗话说得好,没有规矩不成方圆。
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.result
def procRequest(self,req): rsp = Response() rsp.id = req.id if req.command == 'sayHello': rsp.result = self.sayHello() else: raise Exception("unknown command") return rsp
标签:服务端 remote proc rac 异步 height __init__ send 代码
原文地址:http://www.cnblogs.com/mfmdaoyou/p/6952488.html