美文网首页
presto(三)——客户端http请求

presto(三)——客户端http请求

作者: hello高world | 来源:发表于2017-02-15 22:06 被阅读0次

接上一篇文章 presto——词法解析
process(queryRunner, split.statement(), outputFormat, false);
具体实现:

 private static void process(QueryRunner queryRunner, 
                  String sql, OutputFormat outputFormat, 
                  boolean interactive)
    {
         //我们来关注startQuery方法到底在搞什么鬼
        try (Query query = queryRunner.startQuery(sql)) {
        .......
    }

public Query startQuery(String query)
    {
        return new Query(startInternalQuery(query));
    }

public StatementClient startInternalQuery(String query)
    {
        return new StatementClient(httpClient, 
                      queryResultsCodec, session.get(), query);
    }

1、StatementClient构造方法

public StatementClient(HttpClient httpClient, JsonCodec<QueryResults> queryResultsCodec, ClientSession session, String query)
    {
        requireNonNull(httpClient, "httpClient is null");
        requireNonNull(queryResultsCodec, "queryResultsCodec is null");
        requireNonNull(session, "session is null");
        requireNonNull(query, "query is null");

        //在QueryRunner的create方法,读取命令行的参数实例化httpClient
        //主要包括:代理ip端口、通信算法等信息
        this.httpClient = httpClient;
        this.responseHandler = createFullJsonResponseHandler(queryResultsCodec);
         ....这里省略了几行...

        //session是命令行敲入的协调器的地址和服务器--server参数
        //uri=http://localhost:8080/v1/statement
        //method = POST
        //head={X-Presto-Time-Zone=[Asia/Shanghai], User-Agent=[StatementClient/unknown], X-Presto-Source=[presto-cli], X-Presto-Language=[zh-CN], X-Presto-User=[tinygao], X-Presto-Transaction-Id=[NONE]}
        //body =  query的字节数组
        Request request = buildQueryRequest(session, query);
        //远程调用http://localhost:8080/v1/statement  重点
        JsonResponse<QueryResults> response = httpClient.execute(request, responseHandler);

        if (response.getStatusCode() != HttpStatus.OK.code() || !response.hasValue()) {
            throw requestFailedException("starting query", request, response);
        }
        //处理response数据
        processResponse(response);
    }

2、 远程请求分析

httpClient.execute(request, responseHandler);
请求这个http://localhost:8080/v1/statement

1、这个服务什么时候起来
2、客户端调用之后服务器做了什么事情
3、客户端对返回的结果做了什么

相关文章

  • presto(三)——客户端http请求

    接上一篇文章 presto——词法解析process(queryRunner, split.statement()...

  • 12. HTTP协议二:HTTP请求与响应、常见状态码

    HTTP请求与响应 HTTP请求 HTTP请求是指从客户端到服务器端的请求消息。HTTP请求主要由三部分构成,请求...

  • HTTP基础

    一:HTTP的请求方式 二:HTTP响应状态码 三:HTTP请求报文 四:HTTP响应报文 五:使用命令查看客户端...

  • session与cookie之间的关系

    一、客户端与服务端请求响应的关系 USER(客户端) 请求 tomcat(服务器), 属于HTTP请求。http...

  • HTTP

    HTTP是什么 超文本传输协议 http客户端发起请求,创建端口 http服务器在端口监听客户端请求 http服务...

  • node 小记(0418)http

    什么是http及相关知识 http客户端发起请求,创建端口 http服务器在端口监听客户端请求 http服务器向客...

  • IOS 网络请求构建--HTTP简介

    HTTP 介绍 1. HTTP请求与响应 HTTP请求遵循着客户端-服务器范式请求步鄹序列:客户端建立一个到服务器...

  • TCP/HTTP/Socket

    HTTP和Scoket通信的区别。 http是客户端用http协议进行请求,发送请求时候需要封装http请求头,并...

  • 图解HTTP协议读书笔记三

    图解HTTP读书笔记三 HTTP报文 用于HTTP协议交互的信息被称为HTTP报文。客户端的HTTP报文叫做请求报...

  • 计算机网络基础知识

    1.http协议和组成 客户端请求:请求行 请求头 空行 请求体请求行包含请求方法、URI、HTTP版本信息请求头...

网友评论

      本文标题:presto(三)——客户端http请求

      本文链接:https://www.haomeiwen.com/subject/yvqcwttx.html