2010-03-23 33 views
1

Je suis en train d'écrire client jquery pour le serveur cometd (j'utilise jquery.cometd.js plugin) et je suis à court d'idées pourquoi le cas le plus simple possible ne fonctionne pas .Jquery et cometd problèmes avec URL et erreurs 404

Le serveur cometd est derrière apache (il s'exécute donc sur ce même domaine) et toutes les requêtes sont transférées depuis l'uri http://wwwhost/cometd. Le problème est que lorsque j'essaie de me connecter (en exécutant handshake()) à la cometd, il n'envoie pas les requêtes directement à/cometd mais à/cometd/handshake qui donne l'erreur 404. J'ai vérifié sur les autres applications que je testais et dojo est toujours en train de se connecter à/cometd, puis d'envoyer un message 'handshake'.

Quelqu'un a une idée pourquoi jquery.cometd fait cela?

C'est ce que je peux voir dans les journaux apache:

- - [23/Mar/2010:17:59:30 +0100] "POST /cometd/handshake HTTP/1.1" 404 158 "http://wwwhost/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100308 Iceweasel/3.5.8 (like Firefox/3.5.8)" 

Ci-dessous vous trouverez le code j'utilise (il est plus ou moins ce que je suis d'exemples).

(function($) 
{ 
     var COMETD_URL = "http://wwwhost/cometd"; 
     var cometd = $.cometd; 

     $(document).ready(function() { 

       cometd.configure({ 
         url: COMETD_URL, 
         logLevel: 'debug' 
       }); 

       cometd.handshake(); 

     }); 
})(jQuery); 

et le débogage Firebug:

Initial transport is Object {} 
cometd.js (line 278) 
Status disconnected -> handshaking 
cometd.js (line 278) 
Handshake sent Object { version="1.0", more...} 
cometd.js (line 278) 
Send Object { url="http://wwwhost/cometd/handshake", more...} 
cometd.js (line 278) 
POST http://wwwhost/cometd/handshake 
POST http://wwwhost/cometd/handshake 
404 Not Found 104ms 

EDIT

Il ressemble à ma mise en œuvre du serveur ne prend pas en charge l'URI qui est autre que cometd. Jquery ajoute à la fin le type du message, donc lors de l'envoi de la poignée de main, il l'envoie à: /cometd/handshake qui ressemble en général à/cometd/message_type.

J'ai trouvé la fonction qui envoie des messages dans le code cometd.js et la fonction ont trois paramters:

function _send(messages, longpoll, extraPath) 

et cette fonction est appelée par exemple:

_send([message], true, 'connect'); 

qui signifie que je finissent toujours par/cometd/handshake. Je dois corriger le serveur ou commenter l'URL d'ajout dans cometd.js.

Répondre

0

Essayez le réglage appendMessageTypeToURL false

cometd.configure({ 
    url: COMETD_URL, 
    logLevel: 'debug', 
    `appendMessageTypeToURL`: false 
}); 

Mais comme la documentation dit qu'il pourrait y avoir une autre raison pour laquelle la poignée de main ne

La poignée de main peut échouer pour plusieurs raisons:

  • vous avez mal tapé l'URL du serveur
  • long transport sondage n'a pas pu être négocié avec succès
  • le serveur a refusé la poignée de main (par exemple, les informations d'authentification ont eu tort)
  • le serveur est écrasé
  • il y avait une défaillance du réseau
+0

A ne peut pas voir le paramètre appendMessageTypeToURL n'importe où. J'ai vérifié les sources et ça n'existe pas. L'URL du serveur est correcte. J'ai tous les droits pour me connecter au serveur. Le seul problème est le chemin supplémentaire. –

1

J'ai couru dans la même chose. Il a fonctionné en courant sous maven, mais pas directement dans la jetée.

J'ai ajouté un fichier nommé contexts/cometd.xml à ma jetée. Cela semble redondant, mais cela a fonctionné pour moi.

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> 
    <configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/</Set> 
    <Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/server</Set> 
    </configure>