http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

楼主: 2949497060

[其他] timeout问题

[复制链接]
发表于 2014-12-31 13:37:11 | 显示全部楼层
2949497060 发表于 2014-12-31 11:33
哦,您说的意思是不是:在3秒内服务器已经返回了200,但是因为网络等其它原因导致延迟了几秒我这边才收到 ...

是在3秒内已经收到反馈信息了。数据包在通讯的过程中,并不是一下就反馈完的,有IP包。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
回复

使用道具 举报

 楼主| 发表于 2015-3-19 11:46:58 | 显示全部楼层
本帖最后由 2949497060 于 2015-3-19 11:48 编辑
水手 发表于 2014-12-31 13:37
是在3秒内已经收到反馈信息了。数据包在通讯的过程中,并不是一下就反馈完的,有IP包。

就这个问题还要请教一下水手兄:
1、因为我想在3秒内强行判断如果没有返回值就终止,是否只能通过另一个线程去终止这个httprequest?还是说有其它办法去强行终止?
2、强行终止后我要马上重新发起新的request,那么之前被强行终止的request会不会影响新的request获取response导致超时或者失败之类的结果?(这方面可能不是一定的,我只是想问问大家有没有相关经验,因为我目前在做的是跟抢单差不多的事,而碰到的情况是在某些重要时刻response却没反应,而等有反应的时候又已经晚了)
回复

使用道具 举报

发表于 2015-3-19 12:34:47 | 显示全部楼层
@1:直接设置通讯超时时间就可以。超时后就停止了。
@2:重新发起的访问,不受上次访问影响。
回复

使用道具 举报

 楼主| 发表于 2015-3-19 13:03:09 | 显示全部楼层
水手 发表于 2015-3-19 12:34
@1:直接设置通讯超时时间就可以。超时后就停止了。
@2:重新发起的访问,不受上次访问影响。

关于第1点,我已经设置request.timeout为3000,但是还是有过了3秒却没有停止的情况,有时4、5秒才response结束返回false
回复

使用道具 举报

发表于 2015-3-19 14:34:04 | 显示全部楼层
HttpWebRequest.Timeout属性
HttpWebRequest.ReadWriteTimeout 属性 两个都设置
回复

使用道具 举报

 楼主| 发表于 2015-3-19 17:39:44 | 显示全部楼层
水手 发表于 2015-3-19 14:34
HttpWebRequest.Timeout属性
HttpWebRequest.ReadWriteTimeout 属性 两个都设置

我把HttpWebRequest.Timeout设置3000,把HttpWebRequest.ReadWriteTimeout也设置3000,结果还是有4、5秒的情况甚至更长的,晕了,只能通过另一个线程强行终止吗?
回复

使用道具 举报

发表于 2015-3-20 09:58:38 | 显示全部楼层
2949497060 发表于 2015-3-19 17:39
我把HttpWebRequest.Timeout设置3000,把HttpWebRequest.ReadWriteTimeout也设置3000,结果还是有4、5秒 ...

把你的代码贴出来看看吧
回复

使用道具 举报

 楼主| 发表于 2015-3-20 15:24:44 | 显示全部楼层
水手 发表于 2015-3-20 09:58
把你的代码贴出来看看吧

我发现一个情况,超过设定时间的都是获取成功的,response响应返回“操作超时”错误的反而都在设定时间刚好到达时,也就是说成功的但是超过设定时间的应该是还在通讯反馈过程中,而反馈的时间是不受readwritetimeout能限制的
回复

使用道具 举报

 楼主| 发表于 2015-3-20 15:34:37 | 显示全部楼层
本帖最后由 2949497060 于 2015-3-20 15:38 编辑
水手 发表于 2015-3-20 09:58
把你的代码贴出来看看吧

代码如下:
for (int i = 0; i < 30; i++)
            {
                Application.DoEvents();
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://auction1.paipai.com/8F3F1A58000000000401000043BE2D4C");
                request.AllowAutoRedirect = true;
                request.Timeout = 40;
                request.ReadWriteTimeout = 40;
                HttpWebResponse response = null;
                DateTime dt1 = DateTime.Now;
                try
                {
                    response = (HttpWebResponse)request.GetResponse();
                    txtSrcCode.AppendText(string.Format("{0}\r\n", (DateTime.Now - dt1).TotalMilliseconds));
                }
                catch
                {
                    txtSrcCode.AppendText(string.Format("Err:{0}\r\n", (DateTime.Now - dt1).TotalMilliseconds));
                }
                finally
                {
                    if (response != null)
                    {
                        response.Close();
                    }
                    request.Abort();
                }
            }
回复

使用道具 举报

 楼主| 发表于 2015-4-4 09:41:44 | 显示全部楼层
水手 发表于 2015-3-19 12:34
@1:直接设置通讯超时时间就可以。超时后就停止了。
@2:重新发起的访问,不受上次访问影响。

你好,问一个经验性的问题:1、如果一般访问时间是在1.5秒内成功(也有超过1.5秒的很多情况,1.5秒只是测试统计的大部分正常情况),那么设置timeout为一个偏短的时间会比一个偏长的时间更好吗?比如设置1.6秒超时是不是比5秒更好,因为比如就算刚到5秒的时候才响应而不管响应成功还是响应超时,但是可能我如果设置1.6秒就算失败了超时也可以重新发起第2次request,甚至就算第2次也超时了还可以发起第3次request,那么就算第3次成功了总时间也比5秒少或者基本持平,但是提前响应成功的几率更大。这样理解可以吗?
2、或者有另一种理解,就是如果我设置timeout为5秒的时候,某次访问是到接近5秒的时候比如4.5秒返回成功,如果那次访问我换成timtout为1.6秒,那么也会是在第1.6+1.6+1.3秒的第3次的时候才能响应成功吗(我的意思就是:这是被访问网页那边的因素影响的必须到那个点它才能访问成功,还是说有其它因素比如我们这边的request的问题,或者我们这边网络不稳定的问题。如果是被访问网页的不稳定或者其它原因导致只能在那个点才能访问成功,那么我刚才说的第1种理解当然就5秒和1.6秒都没区别了,就设置5秒也ok。如果不是对方网络的因素而是我们这边的request或者网络不稳定的原因,那么感觉就可能不存在必须到4.5秒这个点才能相应成功的情况吧,也就是说可能timeout为1.6秒的第2次响应或者第3次响应比timeout为5秒更早访问到)?
因为我对网络的理解还不太深,希望指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-20 21:08

© 2014-2021

快速回复 返回顶部 返回列表