Проблемы Jquery и Cometd с URL и 404 ошибками - PullRequest
1 голос
/ 23 марта 2010

Я пишу клиент jquery для сервера cometd (я использую плагин jquery.cometd.js), и у меня заканчиваются идеи, почему простейший случай не работает.

Сервер cometd находится за Apache (поэтому он работает на этом же домене) и все запросы пересылаются с uri http://wwwhost/cometd.

Проблема в том, что когда я пытаюсь подключиться (выполняя handshake ()) к кометту, он не отправляет запросы непосредственно к / cometd, но к / cometd / handshake, который выдает ошибку 404. Я проверил другие приложения, которые я тестировал, и dojo всегда подключается к / cometd, а затем отправляет сообщение «рукопожатие».

У кого-нибудь есть идея, почему jquery.cometd делает это?

Вот что я вижу в логах 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)"

Ниже вы можете найти код, который я использую (это более или менее то, что я получил из примеров).

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

        $(document).ready(function() {

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

                cometd.handshake();

        });
})(jQuery);

и отладка 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

Похоже, что моя реализация сервера не поддерживает URI, отличный от cometd. Jquery добавляет в конце тип сообщения, поэтому при отправке рукопожатия оно отправляет его: / cometd / рукопожатие, которое в целом выглядит так / cometd / message_type.

Я нашел функцию, которая отправляет сообщения в коде cometd.js, и у функции есть три параметра:

function _send(messages, longpoll, extraPath)

и эта функция вызывается, например:

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

, что означает, что я всегда буду с / cometd / handshake. Я должен либо починить сервер, либо закомментировать URL-адрес дополнения в cometd.js.

Ответы [ 2 ]

1 голос
/ 14 августа 2010

Я столкнулся с тем же. Это работало при работе под Maven, но не напрямую на пристани.

Я добавил файл с именем contexts / cometd.xml к моей пристани. Это кажется излишним, но у меня это сработало.

  <?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>
0 голосов
/ 23 марта 2010

Попробуйте установить appendMessageTypeToURL в ложь

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

Но, как сказано в документации, может быть и другая причина, по которой рукопожатие не удается

Рукопожатие может потерпеть неудачу в течение нескольких Причины:

  • вы набрали неверный URL сервера
  • не удалось успешно договориться о длительном опросе
  • сервер отказал в квитировании (например, аутентификация учетные данные были неверны)
  • сервер упал
  • произошел сбой сети
...