以前咱们制定了一个很是easy的RPC消息 的格式,但是还遗留了两个问题,上一篇解决掉了一个。还留下一个python
如add(a, b), 怎样在RPC消息中描写叙述參数a,b 。json
详细的RPC消息的封装协议很是多。常见的是基于xml,json封装的。但假设抽象一下,实际也就是一个编解码,管你编码成什么内容呢。就是不编码也可以。管他黑猫白猫。仅仅要能传过去,就是好猫。
函数
利用python里的两个运算。编码
str 和eval。spa
class Request(object): def __str__(self): return str({'id':self.id, 'command':self.command, 'parameter':self.parameter})
@classmethod def encode(cls, message): if isinstance(message, Request): return str(message) elif isinstance(message, Response): return str(message) elif isinstance(message, Notification): return str(message) else: raise Exception('unknown type when encode')
@classmethod def decode(cls, data): info = eval(data) if 'command' in info: request = Request() request.id = info.get('id') request.command = info.get('command') request.parameter = info.get('parameter', {}) return request elif 'result' in info: response = Response() response.id = info.get('id') response.result = info.get('result') return response elif 'message' in info: note = Notification() note.message = info.get('message') return note else: raise Exception('unknown data when decode')