2010-12-13 56 views
1

Note: J'ai posté croisée cette question dans la liste de diffusion Grails utilisateurComment configurer cometd pour qu'il fonctionne correctement avec google chrome?

Ce week-end en utilisant this fantastic blog après comme guide et les cometd plug-in, j'ai pu Grails pour obtenir cometd installé avec mes Grails existants app. Tout fonctionne parfaitement dans FireFox et IE (croyez-le ou non) mais j'ai des problèmes avec Google Chrome. D'après ce que je sais, ça se passe sur la ligne comet.init() dans mon javascript.

Utilisation des outils de développement de Chrome, je vois cette erreur: schéma d'URL incorrect pour http://localhost:8080/myapp/cometd/handshake WebSocket

Je l'ai fait beaucoup de recherche, et a trouvé un poste indiquant que Chrome a des problèmes avec WebSocket et localhost. Avec cette connaissance, j'édité mon fichier hosts pour ressembler à quelque chose comme:
127.0.0.1 local.mydomain.com

L'URL pour comet.init() devient alors http://local.mydomain.com:8080/myapp/cometd/handshake. Cependant, cela n'a pas corrigé le problème, et Chrome avait le même problème, mais cette fois, il semblait que le port n'était pas spécifié. J'ai changé mon application locale pour fonctionner sur le port 80, et l'URL est alors devenue http://local.mydomain.com/myapp/cometd/handshake, mais toujours pas de dés. D'après ce que je peux dire, le cometd 2.0 émule WebSocket en utilisant une interrogation longue dans les navigateurs qui ne supportent pas nativement WebSocket (Firefox, IE, etc), et utilise WebSocket dans les navigateurs qui le supportent (Chrome), donc je suppose que c'est de là que vient mon problème. La recherche m'a également amené à croire que les URL de WebSocket devraient commencer par ws: // au lieu de http: //, c'est peut-être mon problème, mais je ne sais pas comment le configurer avec tomcat/grails.

Est-ce que quelqu'un sait comment je peux corriger mon problème?

+0

Je pense que je l'ai trouvé un travail temporaire autour de l'utilisation de cette ligne de code dans mon javascript: cometd.unregisterTransport (« websocket »); Mais j'aimerais toujours savoir comment je pourrais utiliser le protocole Websocket avec mon projet grails dans le futur. – aasukisuki

Répondre

3

Je pense que j'ai trouvé un travail temporaire en utilisant cette ligne de code dans mon javascript: cometd.unregisterTransport ('websocket'); Mais j'aimerais savoir comment utiliser le protocole Websocket avec mon projet grails dans le futur

+0

qui a fonctionné pour moi aussi bien avec jQuery 1.7.2 et cometd 2.4.3 l'enregistrement du transport websocket a fait l'affaire. Merci pour le tuyau –

1

Si vous utilisez Grails et le plugin Cometd, assurez-vous d'activer simplement les websockets à partir du Javascript. Vous shold également remplacer le plugin Tomcat avec le plugin Jetty 7. Gardez à l'esprit que si vous utilisez une interrogation longue, votre URL de configuration commencera par http: // ou https: // si vous utilisez websockets, elle doit commencer par wss: //.

essayer cette

var url = ""; 
if (Websocket === undefined) { 
    url = "http://mydomain/myconext/cometd"; 
} else { 
    url = "ws://mydomain/myconext/cometd"; 
} 

cometd.configure({ 
    url: url 
}); 

Je Wold recommandé d'utiliser un pont flash. Ce serait beaucoup plus rapide que d'utiliser le long sondage. Voir le lien ci-dessous. https://github.com/gimite/web-socket-js