阅读GET请求时舞者随机挂起

时间:2013-04-13 12:33:52

标签: linux perl internet-explorer internet-explorer-9 dancer

我在Linux上玩perl舞者,如果浏览器直接通过LAN连接到服务器,那么一切都很好。但是,当我通过WAN 连接浏览器是IE9时,偶尔繁忙的光标不会消失。

我可以通过连续10次重新加载页面apx来激发这一点。即使我在每次重新加载之间等待几秒钟,我也会遇到这个问题。页面本身非常简单,并通过了w3c检查。

如果我以root身份运行舞者,或者端口是80还是3000,那也没什么区别。还经常测试使用apache频繁重新加载页面并且似乎没有问题。

我跑过strace,我的印象是,当舞者试图阅读它时,请求数据有时并不可用。这就是跟踪的样子

什么时候有效:

{sa_family=AF_INET, sin_port=htons(52073), sin_addr=inet_addr("78.42.213.92")}, [16]) = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfab5028) = -1 ENOTTY (Inappropriate ioctl for device)
_llseek(4, 0, 0xbfab5070, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfab5028) = -1 ENOTTY (Inappropriate ioctl for device)
_llseek(4, 0, 0xbfab5070, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getpeername(4, {sa_family=AF_INET, sin_port=htons(52073), sin_addr=inet_addr("78.42.213.92")}, [16]) = 0
read(4, "G", 1)                         = 1
read(4, "E", 1)                         = 1
read(4, "T", 1)                         = 1

挂起时

{sa_family=AF_INET, sin_port=htons(52225), sin_addr=inet_addr("78.42.213.92")}, [16]) = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfab5028) = -1 ENOTTY (Inappropriate ioctl for device)
_llseek(4, 0, 0xbfab5070, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfab5028) = -1 ENOTTY (Inappropriate ioctl for device)
_llseek(4, 0, 0xbfab5070, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getpeername(4, {sa_family=AF_INET, sin_port=htons(52225), sin_addr=inet_addr("78.42.213.92")}, [16]) = 0
read(4, 

然后它永远坐着。任何想法我能做什么?

1 个答案:

答案 0 :(得分:4)

我遇到了similar problem,IE9连接到Catalyst dev服务器。 Eric Lawrence(IE Team Lead!?)建议可能是由于IE9的后台连接功能。 IE9打开后台TCP连接以加速将来对服务器的请求,但这显然会导致单线程服务器出现问题。如果您正在运行Dancer的默认开发服务器(HTTP :: Server :: Simple :: PSGI),you won't be able to handle IE9

我通过Apache代理解决了这个问题。它让开发变得更麻烦,但只有当我必须测试IE9时才会这样。