2010-09-29 32 views
3

Ceci est un peu compliqué mais voilà.Socket.IO/Node.JS/Rails 3/IE

J'ai une application Rails qui a un petit widget JS qui est mis à jour sur certaines choses de traitement backend. L'application Rails met en file d'attente un travail dans Redis (via Kthxbye) qui est traité puis, une fois terminé, déclenche un message redis publish. Ce canal est surveillé par un serveur Node.JS qui est responsable du traitement des notifications et de la mise à jour de l'interface Web. Tout fonctionne très bien dans un monde Google Chrome où WebSockets fonctionne.

Cependant Firefox et IE doivent tous les deux utiliser d'autres solutions par défaut car ils ne supportent pas (encore) WebSockets.

Actuellement, il semble que le transport par interrogation xhr par défaut. À partir des journaux Node.js C'est très bien. Cependant, sur IE, il semble qu'il y ait une erreur dans la méthode de transport/interrogation. À partir des journaux Node.js:

29 Sep 15:30:02 - Initializing client with transport "xhr-polling" 
29 Sep 15:30:02 - Client 9219092682469636 connected 
29 Sep 15:30:05 - Client 8440734834875911 disconnected 
29 Sep 15:30:05 - Client 6149627515114844 disconnected 
29 Sep 15:30:07 - Illegal transport "jsonp-polling" 
29 Sep 15:30:07 - Illegal transport "jsonp-polling" 

Il apparaît presque comme si sa connexion et dès qu'il tente de sondage, il se déconnecte en raison d'un problème « transport illégal ». Quelqu'un sait d'où ça vient? Quelques autres indices, le connecteur flash semble se charger correctement, mais je suppose qu'il ne fonctionne pas ou ne parvient pas à charger d'une manière ou d'une autre, car il retombe toujours à xhr-polling. De IE, je peux voir les 3 demandes suivantes sont faites chaque cycle d'interrogation:

GET /socket.io/xhr-polling//1285789236601 HTTP/1.1 
Accept: */* 
Origin: http://plukevdh-desktop:3000 
Accept-Language: en-us 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3) 
Host: itwebpriv1:8081 
Connection: Keep-Alive 
Cache-Control: no-cache 

HTTP/1.1 200 OK 
Content-Type: text/plain 
Content-Length: 25 
Access-Control-Allow-Origin: undefined 
Connection: keep-alive 

--- 

GET /socket.io/xhr-polling//1285789236616 HTTP/1.1 
Accept: */* 
Origin: http://plukevdh-desktop:3000 
Accept-Language: en-us 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3) 
Host: itwebpriv1:8081 
Connection: Keep-Alive 
Cache-Control: no-cache 

HTTP/1.1 200 OK 
Content-Type: text/plain 
Content-Length: 24 
Access-Control-Allow-Origin: undefined 
Connection: keep-alive 

--- 

GET /socket.io/jsonp-polling//1285789241616/0 HTTP/1.1 
Accept: */* 
Referer: http://plukevdh-desktop:3000/jobs/905390 
Accept-Language: en-us 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3) 
Accept-Encoding: gzip, deflate 
Host: itwebpriv1:8081 
Connection: Keep-Alive 

Répondre

1

me semble que vous avez une ancienne version du serveur Socket.IO qui n'a pas encore le soutien jsonp-sondages. Et une version plus récente côté client ... De toute façon dans mon expérience que le transport ATM ne fonctionne pas très bien de toute façon, ne vous embêtez pas avec ça. Dans IE, flashsocket devrait fonctionner et xhr-polling devrait fonctionner aussi, sauf si vous exécutez le serveur S.IO sur un autre domaine que votre site Web. Si vous utilisez un autre port, xhr-polling ne fonctionnera pas dans Opera mais devrait fonctionner dans d'autres navigateurs.

+0

Toutefois, je n'ai pas pu obtenir l'API FlashSocket à prendre en charge. il est toujours contourné sans explication. il semble même charger le fichier flash, mais alors il échoue à xhr polling avec jsonp ... Pouvez-vous expliquer "Si vous utilisez un autre port, xhr-polling ne fonctionnera pas ..." plz? – Lukas

+0

ressemble à un problème d'autorisations qui échouait à exécuter flashsockets. la dernière version en informe. le risque de courir sur le bord je suppose :) – Lukas