Javascript Comed数据未到达客户端
我有两个客户端应用程序,它们使用CometD与服务器通信。我的服务器使用ServerSession的deliver()方法向客户端发送一些数据。数据是字符串形式的 我的一个应用程序是基于Javascript的web应用程序。我可以通过以下方式访问服务器交付的数据:Javascript Comed数据未到达客户端,javascript,java,cometd,Javascript,Java,Cometd,我有两个客户端应用程序,它们使用CometD与服务器通信。我的服务器使用ServerSession的deliver()方法向客户端发送一些数据。数据是字符串形式的 我的一个应用程序是基于Javascript的web应用程序。我可以通过以下方式访问服务器交付的数据: function(theMsg) { alert(theMsg.data); } 当我想在特定通道上发送数据时,它可以作为回调 不幸的是,我的第二个应用程序是一个Java应用程序,它的回调似乎无法获取数据。回调的工作原理如下:
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的消息概念,两种语言的客户端代码都非常标准和简单(我认为)。我仍然会按要求添加代码。。。