2016-07-27 17 views
-1

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); 
} 
+0

は、JavaScriptとJavaの両方で使用する完全なコードを表示してください。 CometDライブラリには、メッセージがサーバーに到達したことを示すサーバーからの応答を取得するために使用される_messageコールバック_と、サーバーから受信したメッセージを受信するために使用される_messageリスナー/ subscriber_という概念があります。完全なクライアントコードがなければ、あなたが参照するものは明確ではありません。 JavaScriptで適切なAPIを使用している可能性があり、Javaで間違ったAPIを使用している可能性があります。 – sbordet

+0

Okaaaay ...私はCometDのメッセージコンセプトをよく知っていて、両方の言語のクライアントコードはかなり標準的で簡単です(私は思っています)。それにもかかわらず、私は要求されたコードを追加します... –

答えて

0

私はこの問題を解決しました。

私が聞いていたチャンネル名のタイプミスに気づいたとき、この質問に投稿するためにJavaコードをフォーマットしていました。私は、サーバーに要求を公開するために使用していたチャネル(データが返される前に私が使用していたリスナーが明らかにアクティブになっていたようです)を含むtypoを修正しました。その結果、getData()メソッドは空でした。

正しいチャネルにデータを送信すると問題が解決しました。私のgetData()メソッドはnullを返さなくなりました。

申し訳ありません申し訳ありませんが、私はそのようなばかばかしいアマチュアミスについて人々に迷惑をかけました。私は将来この種のことを避けようとします。私はそれを調べて再し、私のタイプミスを見つけることが原因となった、完全なコードを要求するためsbordetする

感謝...

関連する問題