长度是 16,和 header 的长度吻合,但是里面装的玩意还是没看出来。
但是这样一看,看前两个字节,你就明白了:
嘿,你说巧了吗,这不是巧了吗,这不是。
魔数也对上了。说明这是一个 Dubbo 的 header。
然后取出第 3 字节,进行位运算,判断这是什么报文:
前面,我们解决了怎么知道当前到底是响应还是请求报文这个问题。
接下来,进入分支里面就重点关注对响应报文的解析了:
从 Debug 的截图里面我们可以看出,当前的状态为 20,表示正常返回。
标记为③的地方,是对心跳包的解析,我们这里不关心。
标记为④的地方,是我们需要重点关注的地方,也是我们一直在寻找的代码。
这个地方就很关键了,大家集中注意力了。
首先,下面代码的截图是 2.7.5 版本的:
这里的 if 分支和分支里面的判断条件,就是我们前面说的:
你用脚指头想也知道了。首先肯定是有一个 if 判断的,判断到底在哪(IO线程/客户端线程池)进行响应解析。而这个分支判断的判断条件,按照 Dubbo 的尿性,肯定是可以配置的。
下面这张图片对 2.7.4.1 和 2.7.5 版本这个地方进行一个对比: