2013-04-13 11 views
5

Ich spiele mit Perl-Tänzer auf Linux und alles ist nett und dany, wenn der Browser verbindet sich mit dem Server direkt über LAN. Jedoch, wenn ich über WAN und verbinden, ist der Browser IE9, dann gelegentlich der beschäftigte Cursor wird nicht weggehen.Tänzer hängt zufällig beim Lesen GET Anfrage

Ich kann das provozieren, indem ich die Seite 10 Mal hintereinander neu lade. Ich bekomme dieses Problem auch, wenn ich mehrere Sekunden zwischen jedem Nachladen warte. Die Seite selbst ist furchtbar einfach und besteht den W3C-Check.

Es macht keinen Unterschied, ob ich Tänzer als root betreibe, oder ob der Port 80 oder 3000 ist. Auch getestet häufiges Nachladen einer Seite mit Apache und es scheint kein Problem zu sein.

Ich lief strace und ich habe den Eindruck, dass die Anfragedaten manchmal nicht verfügbar sind, wenn die Tänzerin versucht, es zu lesen. Dies ist, was die Spur sieht aus wie

Wenn es funktioniert:

{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 

Wenn es

{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, 

hängt und dann sitzt sie für immer. Irgendeine Idee, was ich tun kann?

Antwort

4

Ich lief in eine similar problem mit IE9 Verbindung zu einem Catalyst-dev-Server. Eric Lawrence (IE Team Lead !?) schlug vor, dass dies auf die Hintergrundverbindungsfunktion des IE9 zurückzuführen sein könnte. IE9 öffnet eine Hintergrund-TCP-Verbindung, um zukünftige Anfragen an den Server zu beschleunigen, aber dies verursacht offensichtlich Probleme für Single-Thread-Server. Wenn Sie Dancers Standard-Dev-Server (HTTP :: Server :: Simple :: PSGI) ausführen, geben Sie you won't be able to handle IE9 ein.

Ich arbeitete um es durch die Bevollmächtigung von Apache. Es macht Dev ein bisschen mehr Aufwand, aber nur wenn ich IE9 testen muss.

+0

Ich habe auch gesehen IE9 Hold-Sperren auf Dancer unter Plack mit HTTP :: Server :: Simple ausgeführt. Meine vorläufige Lösung bestand darin, Firefox zu verwenden, und meine langfristige Lösung bestand darin, irgendwann einen höheren Webserver mit Plack zu verwenden. Dancer bietet Dokumentation zur Konfiguration für verschiedene Webserver wie nginx - ähnlich wie die Lösung von @wes. –

+0

@wes Ich setze Tänzer hinter Apache und alles scheint in Ordnung zu sein. Vielen Dank –