Я открываю канал во время инициализации приложения с помощью серии вызовов ajax:
getToken = function () {
xhr = new XMLHttpRequest();
xhr.open("GET", "/game?action=getChannelToken", true);
xhr.send(null);
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status==200) {
connect(xhr.responseText);
}
};
};
Сервлет:
ChannelService channelService = ChannelServiceFactory.getChannelService();
channelToken = channelService.createChannel(uid);
Затем токен возвращается в javascript для:
connect = function (token) {
// alert ("connect");
var channel = new goog.appengine.Channel(token);
var socket = channel.open();
socket.onopen = onOpened;
socket.onmessage = onMessage;
socket.onerror = onError;
socket.onclose = onClose;
};
Я получаю такую ошибку:
ВНИМАНИЕ: / _ah / channel / dev com.google.appengine.api.channel.dev.LocalChannelFailureException: канал для нулевого ключа приложения не найден.
Часть создания канала очень проста, поэтому я не понимаю, в чем проблема. System.out.println (channelToken);
возвращает что-то вроде
канал - rrmk8i-100002139544068
(100002139544068 - это идентификатор пользователя, который я использовал для создания канала), поэтому кажется, что он возвращает настоящий токен. Более того, channelService.sendMessage(msg);
(используя тот же uid, что и раньше) отправляет сообщение без каких-либо проблем.
Кто-нибудь знает, почему это происходит? Я использую eclipse 3.5.2, GAE / J 1.4.2 и ubuntu 10.10
Поискав в Google для этого исключения, я нашел здесь только одно обсуждение: http://groups.google.com/group/google-appengine-java/browse_thread/thread/19f250b1ff0e4342
но изменение var channel = new goog.appengine.Channel(token);
на var channel = new goog.appengine.Channel(uid);
ничего не решило (и, насколько я понимаю, не должно)