Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Comed数据未到达客户端_Javascript_Java_Cometd - Fatal编程技术网

Javascript Comed数据未到达客户端

Javascript Comed数据未到达客户端,javascript,java,cometd,Javascript,Java,Cometd,我有两个客户端应用程序,它们使用CometD与服务器通信。我的服务器使用ServerSession的deliver()方法向客户端发送一些数据。数据是字符串形式的 我的一个应用程序是基于Javascript的web应用程序。我可以通过以下方式访问服务器交付的数据: function(theMsg) { alert(theMsg.data); } 当我想在特定通道上发送数据时,它可以作为回调 不幸的是,我的第二个应用程序是一个Java应用程序,它的回调似乎无法获取数据。回调的工作原理如下:

我有两个客户端应用程序,它们使用CometD与服务器通信。我的服务器使用ServerSession的deliver()方法向客户端发送一些数据。数据是字符串形式的

我的一个应用程序是基于Javascript的web应用程序。我可以通过以下方式访问服务器交付的数据:

function(theMsg) {
  alert(theMsg.data);
}
当我想在特定通道上发送数据时,它可以作为回调

不幸的是,我的第二个应用程序是一个Java应用程序,它的回调似乎无法获取数据。回调的工作原理如下:

public void onMessage(ClientSessionChannel channel, Message message)
{
    String data = (String )theMsg.getData();
    System.out.println("Data "+data);
}
这里的问题是,在Java中,getData()由于某种原因返回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);
}
我解决了这个问题

我正在查看我的Java代码,以便对其进行格式化,以便发布到这个问题,这时我注意到我正在收听的频道名称中有一个输入错误。我更正了输入错误,其中包括一个用于向服务器发布请求的通道(显然,我使用的侦听器在返回数据之前已被激活),因此getData()方法为空

将数据发送到正确的通道解决了问题。My getData()方法不再返回null

很抱歉,我为这样一个可笑的业余错误打扰了人们。我以后会尽量避免这种事情


特别感谢sbordet请求完整的代码,这使我重新检查了它并找到了我的打字错误…

请显示您在JavaScript和Java中使用的完整代码。CometD库具有消息回调的概念,用于从服务器获取消息到达服务器的回复,以及消息侦听器/订阅者的概念,用于接收从服务器接收的消息。如果没有完整的客户端代码,就不清楚您指的是什么。您可能在JavaScript中使用了正确的API,而在Java.okaaay中使用了错误的API。。。我非常了解CometD的消息概念,两种语言的客户端代码都非常标准和简单(我认为)。我仍然会按要求添加代码。。。