Ошибка сообщения в канале API
Я запускаю веб-приложение gae на localhost. Я успешно сгенерировал токен из goog.channel и отправил его клиенту. Где клиент может принять токен и пытается открыть соединение. Проблема в том, что я отправляю сообщение из моего класса сервлетов, и на стороне клиента ничего не происходит.
Ниже приведены мои коды:
Сторона сервера:
//for generating token
ChannelService channelService=ChannelServiceFactory.getChannelService();
token = channelService.createChannel(userid);
//for sending message
ChannelService channelService=ChannelServiceFactory.getChannelService();
channelService.sendMessage(new ChannelMessage(userid, message));
//in appengine-web.xml
<inbound-services>
<service>channel_presence</service>
</inbound-services>
Javascript:
function getToken(){
var xmlhttpreq=new XMLHttpRequest();
xmlhttpreq.open('GET',host+'/channelapi_token?q='+user,false);
xmlhttpreq.send();
xmlhttpreq.onreadystatechange=alert(xmlhttpreq.responseText);
token=xmlhttpreq.responseText;
setChannel();
}
function setChannel(){
alert(token);//iam receiving right token here
channel=new goog.appengine.Channel(token);
socket=channel.open();
socket.open=alert('socket opened');//this message alerts
socket.onmessage=alert('socket onmessage');//this message alerts
socket.onerror=alert('socket onerror');//this message alerts
socket.onclose=alert('socket onclose');//this message alerts
}
Нет никаких исключений при отправке сообщения от ChannelService. Также клиентская сторона постоянно делает запрос get на мой сервер:
Что здесь не так? Заранее спасибо.
1 ответ
Вы вызываете alert(...) и присваиваете его возвращаемое значение обработчикам сообщений. Вместо этого вы должны назначить функцию этим обработчикам:
socket.onopen = function() {
alert('socket opened');
};
// etc
// Note that message takes a parameter:
socket.onmessage = function(evt) {
alert('got message: ' + evt.data);
};
Обратите внимание, что вы также можете сделать это следующим образом:
function onMessage(evt) {
// do something
}
socket.onmessage = onMessage;
Обратите внимание, что вы не назначаете onMessage()
, который вызовет onMessage и назначит его возвращаемое значение.