我正在为 cometd 服务器编写 jquery 客户端(我正在使用 jquery.cometd.js 插件),但我想不出为什么最简单的情况不起作用。
cometd 服务器位于 apache 后面(因此它在同一个域上运行),所有请求都从 uri http://wwwhost/cometd 转发。
问题是当我尝试连接(通过执行握手())到cometd时,它不是直接向/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);
和萤火虫调试:
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
编辑
看起来我的服务器实现不支持 Cometd 以外的 URI。Jquery 在末尾添加消息的类型,因此在发送握手时它会将其发送到:/cometd/handshake,通常看起来像 /cometd/message_type。
我在 cometd.js 代码中找到了发送消息的函数,该函数具有三个参数:
function _send(messages, longpoll, extraPath)
并调用此函数,例如:
_send([message], true, 'connect');
这意味着我将永远以 /cometd/handshake 结束。我必须修复服务器或注释掉 cometd.js 中的附加 url。