以前咱們制定了一個很是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')