小编qbo*_*eau的帖子

在Netty客户端上发送多个异步请求

首先,让我解释一下背景:

我必须创建一个客户端,它将发送许多HTTP请求来下载图像.这些请求必须是异步的,因为只要图像完成,它就会被添加到队列然后打印到屏幕.因为图像可能很大并且响应被分块,我的处理程序必须将它聚合到缓冲区中.

所以我按照Netty示例代码(HTTP勺子示例).

目前,我有三个静态Map来存储每个通道的通道ID和缓冲区/块布尔/我的最终对象.

private static final ConcurrentHashMap<Integer, ChannelBuffer> BUFFER_MAP = new ConcurrentHashMap<Integer, ChannelBuffer>();
private static final ConcurrentHashMap<Integer, ImagePack> PACK_MAP = new ConcurrentHashMap<Integer, ImagePack>();
private static final ConcurrentHashMap<Integer, Boolean> CHUNKS_MAP = new ConcurrentHashMap<Integer, Boolean>();
Run Code Online (Sandbox Code Playgroud)

之后,我创建了我的bootstrap客户端,并计数到countDown挂起的请求数.当响应图像为complet时,最终队列和计数器将传递给我的Handler.

    final ClientBootstrap bootstrap = new ClientBootstrap(
            new NioClientSocketChannelFactory(
            Executors.newCachedThreadPool(),
            Executors.newCachedThreadPool()));
    bootstrap.setOption("keepAlive", true);
    bootstrap.setOption("tcpNoDelay", true);
    bootstrap.setOption("reuseAddress", true);
    bootstrap.setOption("connectTimeoutMillis", 30000);


    final CountDownLatch latch = new CountDownLatch(downloadList.size()) {

        @Override
        public void countDown() {
            super.countDown();
            if (getCount() <= 0) {
                try {
                    queue.put(END_OF_QUEUE);
                    bootstrap.releaseExternalResources();
                } catch (InterruptedException …
Run Code Online (Sandbox Code Playgroud)

java client-server netty

6
推荐指数
1
解决办法
8532
查看次数

标签 统计

client-server ×1

java ×1

netty ×1