zoukankan      html  css  js  c++  java
  • 支持并发的httpclient(基于tcp连接池以及netty)

    闲来无事,将曾经自己写的一个库放出来吧。

    有的时候会有这样子的需求:

    (1)serverA通过HTTP协议来訪问serverB

    (2)serverA可能会并发的像B发送非常多HTTP请求


    类似于上述的需求。可能并不常见。

    。。由于在业务中确实遇到了这样子的场景,所以就自己动手开发了一个库。

    。。


    实现原理:

    (1)底层IO通过netty搞

    (2)维护一个tcp的长连接池,这样子就不用每次发送请求还要建立一个tcp连接了。。。


    以下直接来看怎么用吧:

    (1)最常规的使用方法,向www.baidu.com发送100次get请求:

    ClientPool pool = new NettyClientPool(2, "www.baidu.com");
            pool.start();
            for (int i = 0; i < 100; i++) {
                Request re = new Request("/", Request.RequestMethod.GET);
                pool.request(re).addListener(new Future.Listener() {
                    @Override
                    public void complete(Object arg) {
                        Response res = (Response)arg;
                        System.out.println(res.getBody().toString(Charset.forName("utf-8")));
                    }
    
                    @Override
                    public void exception(Throwable t) {
    
                    }
                });
            }

    这里能够看到,事实上这里是异步的提交的,所以须要注冊一些回调。。。


    (2)使用同步的方式发送请求。这里就弄成Post请求吧:

            ClientPool pool = new NettyClientPool(2, "www.baidu.com");
            pool.start();
            Request re = new Request("/", Request.RequestMethod.POST);
            re.getBody().writeBytes("aaaa".getBytes(Charset.forName("utf-8")));
            try {
                Response response = pool.requestWithTimeOut(re, 2000).sync();
                System.out.println(response.getBody().toString(Charset.forName("utf-8")));
            } catch (Throwable throwable) {
                System.out.println(throwable);
            }
            pool.stop();

    这里能够看到,提交请求的时候还带有超时的额,也就是2000毫秒都还没有搞完。那么就不搞了。


    好了,就介绍这些吧,反正post和get请求都有。支持超时控制。。

    支持并发。。

    。至于说性能嘛。。。应该不差吧,也不知道该跟谁比較。。

    。。

    最后给出github地址吧:

    https://github.com/2225377fjs/HttpClientPool

    点击打开链接



  • 相关阅读:
    学会数据库读写分离、分表分库
    MySql数据主从同步配置
    数据库事务的四大特性以及事务的隔离级别
    tensor维度变换
    本地存储,序列化与反序列化
    连连看项目实战之四(异步加载进度条)
    连连看项目实战之二(礼盒动画)
    连连看项目实战之三(解析配置表)
    连连看项目实战之一(搭建场景)
    设计模式(C#)——12责任链模式
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7058966.html
Copyright © 2011-2022 走看看