日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AsyncHttpClient的连接池使用逻辑

發(fā)布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AsyncHttpClient的连接池使用逻辑 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AsyncHttpClient的連接池結(jié)構(gòu)很簡單, NettyConnectionsPool內(nèi)部重要的幾個變量如下

// 連接池, 通過 host 區(qū)分不同的池private final ConcurrentHashMap<String, ConcurrentLinkedQueue<IdleChannel>> connectionsPool = new ConcurrentHashMap<String, ConcurrentLinkedQueue<IdleChannel>>();// 原生channel跟IdleChannel對象的映射, IdleChannel主要是包含一些請求信息, 請求url以及請求開始時間private final ConcurrentHashMap<Channel, IdleChannel> channel2IdleChannel = new ConcurrentHashMap<Channel, IdleChannel>();// 記錄了Channel的創(chuàng)建時間, 用于做Channel生命周期檢測, 如果生命周期是-1, 此Map無用private final ConcurrentHashMap<Channel, Long> channel2CreationDate = new ConcurrentHashMap<Channel, Long>();

?

主要邏輯都位于NettyAsyncHttpProvider下

1. 取出連接池連接(doConnection階段)
先從連接池取出連接, 取出連接后會將連接從connectionsPool的數(shù)量會減少

synchronized (idleConnectionForHost) {idleChannel = idleConnectionForHost.poll();if (idleChannel != null) {channel2IdleChannel.remove(idleChannel.channel);} }

如果連接存在, 取出來以后直接就會返回future. 否則進入下列流程

?

2. 對池內(nèi)連接的控制 (doConnect階段)
在doConnect的時候會判斷connectionsPool是否可cache, 如下

public boolean canCacheConnection() {if (!isClosed.get() && maxTotalConnections != -1 && channel2IdleChannel.size() >= maxTotalConnections) {return false;} else {return true;}}

其中channel2IdleChannel在連接池poll的時候會remove channel, 也就是說判斷的連接數(shù)是在池內(nèi)的channel數(shù)
加入返回false, 則會調(diào)用asyncHandler的onThrowable()方法, 并拋出 "Too many connections " 異常

// Do not throw an exception when we need an extra connection for a redirect.if (!reclaimCache && !connectionsPool.canCacheConnection()) {IOException ex = new IOException(String.format("Too many connections %s", config.getMaxTotalConnections()));try {asyncHandler.onThrowable(ex);} catch (Throwable t) {log.warn("!connectionsPool.canCacheConnection()", t);}throw ex;}

provider對這一步的判斷在 3) 的判斷之前

?

3. 對池外連接的控制 (doConnect階段)
池外連接使用
private Semaphore freeConnections = null;
進行控制, 他的值為 MaxTotalConnections, 這個值和連接池的是一樣的, 邏輯如下

if (trackConnections) {if (!reclaimCache) {if (!freeConnections.tryAcquire()) {IOException ex = new IOException(String.format("Too many connections %s", config.getMaxTotalConnections()));try {asyncHandler.onThrowable(ex);} catch (Throwable t) {log.warn("!connectionsPool.canCacheConnection()", t);}throw ex;} else {acquiredConnection = true;}}}

默認調(diào)用的
public <T> ListenableFuture<T> execute(Request request, AsyncHandler<T> handler) throws IOException;
方法, reclaimCache 都為 false

?

4. 向連接池添加連接邏輯 (Protocol handle()階段)
在provider的HttpProtocol類里會調(diào)finishUpdate()方法, 這里會執(zhí)行向連接池添加連接的操作, 調(diào)用offer方法

private void finishUpdate(final NettyResponseFuture<?> future, final ChannelHandlerContext ctx, boolean lastValidChunk) throws IOException {if (lastValidChunk && future.getKeepAlive()) {drainChannel(ctx, future);} else {if (future.getKeepAlive() && ctx.getChannel().isReadable() && connectionsPool.offer(getPoolKey(future), ctx.getChannel())) {markAsDone(future, ctx);return;}finishChannel(ctx);}markAsDone(future, ctx);}

連接池的offer方法沒有對maxTotalConnections的判斷, 只對maxConnectionPerHost做判斷

轉(zhuǎn)載于:https://www.cnblogs.com/zemliu/p/3690038.html

總結(jié)

以上是生活随笔為你收集整理的AsyncHttpClient的连接池使用逻辑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 少妇4p| 国产成人精品久久久 | 欧美激情综合五月色丁香 | 69人妻一区二区三区 | 黄色片欧美 | 一本之道久久 | 伊人免费视频二 | 国产高清露脸 | caoprom97| 国产免费一区二区三区网站免费 | 蜜桃视频在线观看www | 国产美女明星三级做爰 | 国语对白少妇spa私密按摩 | 高hhhhh| 性猛交xxxx乱大交孕妇2十 | 无码人妻丰满熟妇区五十路百度 | 欧美精品国产一区 | 亚洲人在线视频 | 日韩欧美亚洲一区二区 | 日韩久久电影 | 国产叼嘿视频 | 亚洲国产精品女人久久久 | 精品少妇久久久久久888优播 | av片亚洲 | 国产成人午夜 | 亚洲一区二区偷拍 | 欧美日韩理论 | 美女上床网站 | 欧美成人午夜免费视在线看片 | 欧美草b | 朝桐光av一区二区三区 | 精品第一页 | 免费看黄色片子 | 国模私拍一区二区 | 亚洲一区欧洲一区 | 无码人妻精品一区二区三区9厂 | 日韩精品一线二线三线 | 麻豆免费在线观看视频 | 操屁股视频 | 国产精品污污 | 亚洲综合五月天婷婷丁香 | 日韩精品在线免费 | 亚洲欧洲国产视频 | 插骚| 天堂在线免费观看 | 免费av不卡在线观看 | 天天狠天天插天天透 | 亚洲xx网| 一级特黄aaa大片 | 国产在线观看a | 久久免费看少妇 | 天天色影网 | 色视频网址| 亚洲在线第一页 | 国产91网址 | 色综合中文字幕 | 91亚洲国产成人精品一区二三 | a∨鲁丝一区鲁丝二区鲁丝三区 | 中文字幕在线播放一区 | 一级美女大片 | 95看片淫黄大片一级 | 午夜视频入口 | 久久国语精品 | 亚洲欧美中文字幕 | 麻豆av在线| 亚洲色图 一区二区 | 国产主播啪啪 | 熟女性饥渴一区二区三区 | 国产精品suv一区二区 | 超碰免费在线97 | 日本一区二区不卡视频 | 免费在线观看国产精品 | 住在隔壁的她动漫免费观看全集下载 | 91免费网站在线观看 | 亚洲视频手机在线观看 | 亚洲熟妇av乱码在线观看 | 亚洲色图第一页 | 女裸全身无奶罩内裤内衣内裤 | 美女大逼 | 奇米一区二区 | 在线观看色网 | www.久久久.com | 天天色图片| 欧美另类极品videosbest使用方法 | 新x8x8拨牐拨牐永久免费影库 | 欧洲色综合 | 国产激情免费视频 | 啪啪自拍 | 国产欧美高清 | 欧美做爰性生交视频 | 精品国产乱码久久久久久1区二区 | 在线观看第一页 | 一女二男一黄一片 | 少妇真实被内射视频三四区 | 国产成人久久精品麻豆二区 | 日韩制服在线 | 中文字幕高清在线播放 | 黄色香蕉网 | 国产精品12页|