博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FiberHttpClient Basic
阅读量:5878 次
发布时间:2019-06-19

本文共 2108 字,大约阅读时间需要 7 分钟。

hot3.png

Fiber Async Transform

将任意同步操作换成Fiber Async

FiberHttpClient

@Override    @Suspendable    protected final CloseableHttpResponse doExecute(final HttpHost target, final HttpRequest request, final HttpContext context) throws IOException, ClientProtocolException {        try {            for (int executionCount = 0;; executionCount++) {                   try {                    final HttpResponse response = new AsyncHttpReq() {                        @Override                        protected void requestAsync() {      //所有的代码就是在这里把 sync 转化为fiber async                            client.execute(target, request, context, this);                        }                    }.run();                    return new CloseableHttpResponseWrapper(response);                }        ........ 这里省略    }

Configuration

值得一提的是,FiberHttpClient,其实是用的 CloseableHttpAsyncClient来进行IO操作,只是一开始调用的线程换成了fiber,可以执行更多的请求(比线程轻量),和执行其它的操作(fiber.get() or channel.receive() )。

public class FiberHttpClient extends CloseableHttpClient {    private final Log log = LogFactory.getLog(getClass());    private final CloseableHttpAsyncClient client;    private final HttpRequestRetryHandler httpRequestRetryHandler;    private DefaultConnectingIOReactor ioreactor;    public FiberHttpClient(CloseableHttpAsyncClient client) {        this(client, null, null);    }    public FiberHttpClient(CloseableHttpAsyncClient client, IOReactor ioreactor) {        this(client, null, ioreactor);    }    public FiberHttpClient(CloseableHttpAsyncClient client, HttpRequestRetryHandler httpRequestRetryHandler) {        this(client, httpRequestRetryHandler, null);    }    public FiberHttpClient(CloseableHttpAsyncClient client, HttpRequestRetryHandler httpRequestRetryHandler, IOReactor ioreactor) {        this.client = client;        this.httpRequestRetryHandler = httpRequestRetryHandler;        if (ioreactor != null && ioreactor instanceof DefaultConnectingIOReactor)            this.ioreactor = (DefaultConnectingIOReactor) ioreactor;        if (!client.isRunning())            client.start();    }

转载于:https://my.oschina.net/tigerlene/blog/849560

你可能感兴趣的文章
raid技术-研究感受
查看>>
远程主机探测技术FAQ集 - 扫描篇
查看>>
C++中调用python函数
查看>>
Nomad添加acl认证
查看>>
“TI门外汉”网路知识笔记一 OSI参考模型
查看>>
你不需要jQuery(五)
查看>>
DatanodeDescriptor说明
查看>>
ServlertContext
查看>>
eclipse编辑器生命周期事件监听
查看>>
Python WOL/WakeOnLan/网络唤醒数据包发送工具
查看>>
sizeof(long)
查看>>
pxe网络启动和GHOST网克
查看>>
ftp 虚拟用户的使用(安装)
查看>>
2.5-saltstack配置apache
查看>>
http状态响应码大全(复制转帖)
查看>>
django数据库中的时间格式与页面渲染出来的时间格式不一致的处理
查看>>
Python学习笔记
查看>>
java String
查看>>
renhook的使用
查看>>
Linux学习笔记(十二)--命令学习(用户创建、删除等)
查看>>