У меня есть два клиентских приложения, которые используют CometD для общения с сервером. Мой сервер отправляет некоторые данные моим клиентам, используя метод доставки() ServerSession. Данные представлены в виде строки.Данные CometD не достигают клиента
Одно из моих приложений - это веб-приложение на основе Javascript. Я могу получить доступ к данным, поставляемых сервер следующим образом:
function(theMsg) {
alert(theMsg.data);
}
Это хорошо работает как обратный вызов, когда я хочу, чтобы отправить данные по определенному каналу.
К сожалению, моим вторым приложением является Java-приложение, чей обратный вызов, похоже, не способен получить данные. Обратный вызов работает следующим образом:
public void onMessage(ClientSessionChannel channel, Message message)
{
String data = (String)theMsg.getData();
System.out.println("Data "+data);
}
Проблема здесь состоит в том, что GetData() по какой-то причине возвращает нуль в Java. Я не могу найти способ получить данные, которые я отправил с сервера!
Есть ли какая-то ошибка в java CometD API, или я использую неправильную функцию для получения данных, которые я отправляю с сервера? Как я могу получить эти данные?
Кто-то пожалуйста, сообщите ...
Дополнение 1: ниже является первым клиентом, реализованная в Javascript, по просьбе sbordet. Этот клиент работает ...
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/абонента, который используется для приема сообщений, полученных от сервера. Без полного кода клиента неясно, на что вы ссылаетесь. Возможно, вы используете правильный API в JavaScript, а другой - в Java. – sbordet
Okaaaay ... Я прекрасно понимаю концепцию сообщений CometD, а клиентский код для обоих языков довольно стандартный и простой (я думаю). Тем не менее я добавлю код в соответствии с запросом ... –