私はcometdサーバー用のjqueryクライアントを書いています(私はjquery.cometd.jsプラグインを使用しています)、そして私は考えられる最も単純なケースが機能しない理由のアイデアを使い果たしています。
cometdサーバーはapacheの背後にあり(したがって、この同じドメインで実行されています)、すべてのリクエストはuri http:// wwwhost/cometdから転送されます。
問題は、(handshake()を実行して)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);
および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
編集
私のサーバー実装はcometd以外のURIをサポートしていないようです。Jqueryは最後にメッセージのタイプを追加するため、ハンドシェイクを送信すると、メッセージは/ cometd / handshakeに送信されます。これは、一般に/ cometd/message_typeのように見えます。
cometd.jsコードでメッセージを送信している関数が見つかりました。この関数には、次の3つのパラメーターがあります。
function _send(messages, longpoll, extraPath)
この関数は、たとえば次のように呼び出されます。
_send([message], true, 'connect');
つまり、私は常に/ cometd/handshakeで終わるということです。サーバーを修正するか、cometd.jsの追加URLをコメントアウトする必要があります。