我正在Linux上与Perl Dancer一起玩,如果浏览器直接通过LAN连接到服务器,那么一切都很好。但是,当我通过WAN连接并且浏览器是IE9时,繁忙的光标有时不会消失。

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

如果我以root用户身份运行dancer,或者端口是80还是3000,都没有什么区别。A也测试了使用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,

然后它永远坐着。知道我能做什么吗?

最佳答案

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

我通过从Apache代理来解决此问题。它使开发人员有点麻烦,但仅当我必须测试IE9时才如此。

关于linux - 读取GET请求时,舞者会随机挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15987837/

10-15 13:45