首页 新闻 会员 周边 捐助

客户端-网站-网站 超时问题

0
悬赏园豆:20 [待解决问题]

场景描述:

客户端A请求网站B获取数据,网站B又需要请求网站C获取数据,网站C返回结果后,网站B才能将结果返回客户端A。

A和B之间设置5s 超时,B和C之间设置30秒超时。正常情况下C会在几百毫秒内返回结果。

问题:

C由于某种原因计算时间变长,超过了5秒以上,或者到达30秒后。A和B之间的通讯因5s超时返回,超时后又发起新请求,但B和C之间因设置的30s所以一直保持连接,导致B和C之间的连接数越来越多,有时会到达800以上,导致C服务器资源耗尽,产生恶性循环。

碰到这种问题,不知大家有没有好的解决方案。

gaoli的主页 gaoli | 菜鸟二级 | 园豆:252
提问于:2011-06-14 12:05
< >
分享
所有回答(4)
0

我有点疑惑的是,居然c正常情况下几百毫秒就能返回结果,为什么 b->c设置30秒?而a-B设置5秒?

dwwwing | 园豆:661 (小虾三级) | 2011-06-14 13:39
B到C的连接时Web服务器默认的,没有做限制。A到B是客户端程序调用,大约有千分之一的概率时间超过5秒,为防止应用等待很长时间,所以设置了5秒
支持(0) 反对(0) gaoli | 园豆:252 (菜鸟二级) | 2011-06-14 14:04
A->B 带上唯一标示Guid。当A反复请求B时,如果B->C尚未返回,并且时间<30s,那么A->B的请求进入队列。一旦B->C请求完成或者超时,则会自动释放B->C的连接,然后继续请求队列里的request.
支持(0) 反对(0) dwwwing | 园豆:661 (小虾三级) | 2011-06-15 16:12
0

疑惑。。。

文雨 | 园豆:133 (初学一级) | 2011-06-14 13:45
0

前提:你可以控制A和B.当第一次A向B请求时带个唯一标识位过去.如果A超时了。再请求一次让B释放对C的请求,然后,A再重新请求。

Stangray | 园豆:205 (菜鸟二级) | 2011-06-14 14:35
A和B都是可控的,那如何去控制让B释放对A的请求?
支持(0) 反对(0) gaoli | 园豆:252 (菜鸟二级) | 2011-06-14 14:40
B还会有A的请求吗?你的图上只有返回。而且。我相信你的请求应该是用HTTP吧!那是无连接的。所以,应该不存在B对A的请求。
支持(0) 反对(0) Stangray | 园豆:205 (菜鸟二级) | 2011-06-21 10:02
0

就是不知道 如果请求超时 你想达到什么样的效果呢?  继续等待  还是 重新...

超时的放到队列里或者其他自定义存储.当A-->B 再次超时判断队列里是否存在 如果存在 则继续使用队列里的. 这样我们的关注点就变成了 如果把 队列里 超时的 与C 交互....可以等待,或者超过一定规则就cancel掉,重新发...等.这个过程中 可以做标示 来确认C 与 自定义队列中 执行完的 还未完的...

码码浒浒 | 园豆:216 (菜鸟二级) | 2011-06-14 16:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册