CometDを使用してサーバーと通信する2つのクライアントアプリケーションがあります。私のサーバーは、ServerSessionのdeliver()メソッドを使用してクライアントにデータを送信します。データは文字列形式です。CometDデータがクライアントに届かない
私のアプリケーションの1つは、JavascriptベースのWebアプリケーションです。私は、次のようにサーバによって提供されたデータにアクセスすることができます
function(theMsg) {
alert(theMsg.data);
}
これは、私が特定のチャネル上でデータを送信したいときのためのコールバックとして適しています。
私の2番目のアプリケーションは、コールバックがデータを取得できないようなJavaアプリケーションです。コールバックは次のように機能します。
public void onMessage(ClientSessionChannel channel, Message message)
{
String data = (String)theMsg.getData();
System.out.println("Data "+data);
}
ここでの問題は、何らかの理由でgetDataがJavaでnullを返すことです。私はサーバーから送信したデータを取得する方法を見つけることができないようです!
java CometD APIに何らかのバグがありますか、間違った機能を使ってサーバーから送信しているデータを取得していますか?このデータはどうすれば入手できますか?誰かが助言してください
...
追加1:以下sbordetによって要求されるように、JavaScriptで実装され、最初のクライアントです。このクライアントは動作します...
var cometD = $.cometd;
var isConnected = false;
var rcvHandshake = function(hndValue) {
console.log("Received handshake. Success flag is " + hndValue.successful);
}
var amConnected = function(msgConnect) {
if(cometD.isDisconnected())
{
isConnected = false;
console.log("Server connection not established!");
}
else
{
var prevconnected = mySelf.isConnected;
// This checks whether or not the connection was actually successful
isConnected = msgConnect.successful === true;
if((prevconnected == false) && (isConnected == true))
{
console.log("Connected to the server!");
cometD.addListener("/service/output",updateOutput);
}
else if((prevconnected == true) && (isConnected == false))
{
console.log("Connection to server has ended!")
}
}
}
var startUp = function() {
console.log("Starting up...");
var cometURL = $(location).attr('origin') + "/tester/cometd";
cometD.configure({
url: cometURL,
logLevel: 'info'
});
cometD.addListener('/meta/handshake',rcvHandshake);
cometD.addListener('/meta/connect',amConnected);
cometD.handshake({
"thehash.autohash": "foo-bar-baz-hash"
});
}
var updateOutput = function(theOut) {
alert(theOut.data);
}
は、JavaScriptとJavaの両方で使用する完全なコードを表示してください。 CometDライブラリには、メッセージがサーバーに到達したことを示すサーバーからの応答を取得するために使用される_messageコールバック_と、サーバーから受信したメッセージを受信するために使用される_messageリスナー/ subscriber_という概念があります。完全なクライアントコードがなければ、あなたが参照するものは明確ではありません。 JavaScriptで適切なAPIを使用している可能性があり、Javaで間違ったAPIを使用している可能性があります。 – sbordet
Okaaaay ...私はCometDのメッセージコンセプトをよく知っていて、両方の言語のクライアントコードはかなり標準的で簡単です(私は思っています)。それにもかかわらず、私は要求されたコードを追加します... –