Skip to content
😮A simple HTTP client
Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea 项目 Jul 14, 2019
src/main/java/cn/ddnd/yohttp 修改最大线程数 Jul 14, 2019
.gitignore 更换线程池 Jul 14, 2019
README.md 修改readme Apr 12, 2019
http.iml yohttp Apr 8, 2019
pom.xml 解决POST死循环问题 May 9, 2019

README.md

Yohttp

软件架构

笔者将软件大概设计成五大模块:

  1. 请求信息
    这部分即对应上图的Request,用于用户构建请求信息,如URLmethod、请求头等。这部分是用户可以操作的。
  2. Yohttp客户端
    用户创建一个YoHttp,然后将请求信息注入到Yohttp即可以开始使用请求功能,请求包括同步请求和异步请求,其中一个YoHttp包含一个调度中心、一个连接池,所以对于一个项目来说,维护着一个YoHttp客户端就足以。
  3. 处理链
    这里是请求的具体实现操作,笔者将一个一个操作封装成一个拦截器,如把获取Socket连接的操作封装成连接拦截器、把Socket流的读写封装成收发拦截器,然后我们请求需要用到哪些操作,即可把这些拦截器一个一个拼接起来组合成一个处理链(Chain),一个处理链对应着一个请求。执行处理链中的一个个拦截器,直到执行完所有的拦截器,也对应着一个请求的完成。这也是为什么我们需要将收发拦截器放在最后,因为一个请求的最后一个操作肯定是进行Socket流的写和读。

  1. 调度中心
    调度中心在使用异步请求的时候用到,调度中心维护着一个请求队列和一个线程池,请求队列里面存储的是处理链Chain。线程池负责执行队列中的处理链。

  2. 连接池
    每个请求都是去连接池获取Socket连接,如果连接池中存在IPPORT相同的连接则直接返回,否则创建一个Socket连接存储到连接池然后返回,而连接池中的连接闲置时间超过最大允许闲置的时间后就会被关闭

使用教程

  1. 同步请求
Request request = new Request.Builder()
        .url("www.baidu.com")
        .get()
        .build();
YoHttpClient httpClient = new YoHttpClient();
Response response = httpClient.SyncCall(request).executor();
System.out.println(response.getBody());

第一步新建个请求信息Request,填写请求的URL、请求方法、请求头等信息。
第二步新建个YoHttp客户端,选择同步请求并将请求信息注入,执行请求。

  1. 异步请求
Request request = new Request.Builder()
        .url("www.baidu.com")
        .get()
        .build();
YoHttpClient httpClient = new YoHttpClient();
httpClient.AsyncCall(request).executor(new CallBack() {
    @Override
    public void onResponse(Response response) {
        System.out.println(response.getBody());
    }
});

第一步新建个请求信息Request,填写请求的URL、请求方法、请求头等信息。
第二步新建个YoHttp客户端,选择异步请求并将请求信息注入,执行请求,当请求有响应的时候,会通过回调异步请求的onResponse方法来反馈响应内容。

You can’t perform that action at this time.