in dubbo/codec/encoder.py [0:0]
def _encode_request_body(self):
"""
对所有的已知的参数根据dubbo协议进行编码
:return:
"""
dubbo_version = self.__body['dubbo_version']
path = self.__body['path']
version = self.__body['version']
method = self.__body['method']
arguments = self.__body['arguments']
body = []
body.extend(self._encode_single_value(dubbo_version))
body.extend(self._encode_single_value(path))
body.extend(self._encode_single_value(version))
body.extend(self._encode_single_value(method))
body.extend(self._encode_single_value(self._get_parameter_types(arguments)))
for argument in arguments:
body.extend(self._encode_single_value(argument))
attachments = {
'path': path,
'interface': path,
'version': version
}
# attachments参数以H开头,以Z结尾
body.append(ord('H'))
for key in attachments.keys():
value = attachments[key]
body.extend(self._encode_single_value(key))
body.extend(self._encode_single_value(value))
body.append(ord('Z'))
# 因为在上面的逻辑中没有对byte大小进行检测,所以在这里进行统一的处理
for i in xrange(len(body)):
body[i] = body[i] & 0xff
return body