异步连接池整理Step1

来源:互联网 发布:网络爬虫 翻译 编辑:程序博客网 时间:2024/04/30 01:45

1. 调用入口

AsyncGenericConnectionPool的sendRequest函数

函数内部完成多项主要任务:

1. 选环(每个连接池对应的request对象有其自有的选环策略)

 int serverCount = this.getServerIdCount();

如WebQuery的选环策略如下:

public int getServerId( int serverCount ){if( serverCount <= 0 ) return -1;byte[] bt = getDigest();if( bt==null || bt.length<=0 ){return -1;}int t = (int)bt[0];if(t<0) t+= 256;Statistics.getInstance().cacheQuery( t%16 );int val;if( bt[0] < 0 ){val = bt[0]+256;} else {val = bt[0];}int ret = val % serverCount;Statistics.getInstance().realCacheQuery( ret );return ret;}

2.请求类别

请求类别:

1. 重试请求

2. 影子请求

3. 普通请求


重试请求:

连接池会将该请求会发送给一个已经标记为不可用的searchhub服务器,目的在于:

1.验证该服务器运行状态是否恢复,如果成功收到该服务器响应请求,则重新标记该服务器为可用服务器

2.如果重试请求收到的结果早于普通结果收到的结果返回,则使用重试请求得到的结果


影子请求:

影子请求是对应与某个普通请求的,是某个普通请求的“影子”,该请求的出现是由于普通请求在一定的短时间内没有收到响应,由连接池构建一个新的请求(影子)

发送给别的服务器,两个请求谁先收到响应则使用谁的结果


普通请求:

对应用户访问生成的请求,由异步连接池进行发送


用户选环成功后,选取该环对应的服务器,将request请求发送给对应的服务器(searchhub)



原创粉丝点击