异步连接池整理Step1

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)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值