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

Mar*_*urg 5 linux perl internet-explorer internet-explorer-9 dancer

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

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

如果我以舞者身份运行舞者,或者端口是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
Run Code Online (Sandbox Code Playgroud)

当它挂起

{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, 
Run Code Online (Sandbox Code Playgroud)

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

wes*_*wes 4

我在 IE9 连接到 Catalyst 开发服务器时遇到了类似的问题。Eric Lawrence(IE 团队负责人!?)表示这可能是由于 IE9 的后台连接功能所致。IE9 打开后台 TCP 连接以加速将来对服务器的请求,但这显然会给单线程服务器带来问题。如果您运行 Dancer 的默认开发服务器 (HTTP::Server::Simple::PSGI),您将无法处理 IE9

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