Я пишу клиент 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.