HttpClient源码解析系列:第三篇:发送-接收的底层过程


    HttpConnection衍生出来的:

    另外一个我们都知道的是 HttpClientConnection:

    我们先把Connection相关的列出来,暂时不考虑Factory|Pool|Context。实际上,Factory|Pool|Context 列在这里是Intellj IDEA 的工具问题,以HttpConnectionFactory为例:
HttpConnectionFactory<T extends HttpConnection>
    它只是泛型中继承了HttpConnection,HttpConnectionFactory本身并不是从HttpConnection中派生出来的。

    以这两个接口派生出来的接口和类来往下延伸,由于比较多,所以去掉了已经声明为废弃的(每个接口派生出来的都看一遍才能确定)。发现4.3开始,都集中推荐使用DefaultBHttpClientConnection,而它又是继承自BHttpConnectionBase。

    对于DefaultBHttpClientConnection,可以看到非常核心的元素,responseParser 以及 requestWriter。 以及上一节中提到的核心的方法:
this.requestWriter = (requestWriterFactory != null ? requestWriterFactory :
            DefaultHttpRequestWriterFactory.INSTANCE).create(getSessionOutputBuffer());
this.responseParser = (responseParserFactory != null ? responseParserFactory :
            DefaultHttpResponseParserFactory.INSTANCE).create(getSessionInputBuffer(), constraints);

构造方法里给出了 requestWriter 和 responseParser 的构造方式,跟踪到 Factory 中可以看到
实际上两者是基于 SessionOutputBuffer 以及 SessionInputBuffer 的。

看一下核心方法:
AbstractMessageWriter中的:
    @Override
    public void write(final T message) throws IOException, HttpException {
        Args.notNull(message, "HTTP message");
        writeHeadLine(message);
        for (final HeaderIterator it = message.headerIterator(); it.hasNext(); ) {
            final Header header = it.nextHeader();
             this.sessionBuffer.writeLine
                (lineFormatter.formatHeader(this.lineBuf, header));
        }
        this.lineBuf.clear();
         this.sessionBuffer.writeLine(this.lineBuf);
    }

    AbstractMessageParser中的:
    @Override
    public T parse() throws IOException, HttpException {
        final int st = this.state;
        switch (st) {
        case HEAD_LINE:
            try {
                 this.message = parseHead(this.sessionBuffer);
            } catch (final ParseException px) {
                throw new ProtocolException(px.getMessage(), px);
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值