in dubbo/connection/connections.py [0:0]
def _parse_head(self, data, conn):
"""
对dubbo响应的头部信息进行解析
:param data:
:param conn:
:return:
"""
try:
heartbeat, body_length = parse_response_head(data)
except DubboResponseException as e: # 这里是dubbo的内部异常,与response中的业务异常不一样
logger.exception(e)
body_length = unpack('!i', data[12:])[0]
invoke_id = unpack('!q', data[4:12])[0]
return body_length, 2, invoke_id
if heartbeat == 2:
logger.debug('❤ request -> {}'.format(conn.remote_host()))
msg_id = data[4:12]
heartbeat_response = CLI_HEARTBEAT_RES_HEAD + list(msg_id) + CLI_HEARTBEAT_TAIL
conn.write(bytearray(heartbeat_response))
return body_length, 3, None if body_length > 0 else DEFAULT_READ_PARAMS
elif heartbeat == 1:
logger.debug('❤ response -> {}'.format(conn.remote_host()))
host = conn.remote_host()
self.client_heartbeats[host] -= 1
return body_length, 3, None if body_length > 0 else DEFAULT_READ_PARAMS
# 普通的数据包
else:
invoke_id = unpack('!q', data[4:12])[0]
return body_length, 3, invoke_id