【发布时间】:2011-07-19 00:36:37
【问题描述】:
我在应用初始化期间通过一系列 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: 应用程序密钥 null 的通道不是 找到了。
频道创建部分很简单,所以我不明白问题出在哪里。
System.out.println (channelToken); 返回类似
频道--rrmk8i-100002139544068
(100002139544068 是我用来创建频道的 uid),所以它似乎返回了一个真实的令牌。此外,channelService.sendMessage(msg);(使用与以前相同的 uid)发送消息没有任何问题。
有人知道为什么会这样吗? 我正在使用 eclipse 3.5.2、GAE/J 1.4.2 和 ubuntu 10.10
谷歌搜索该异常,我发现这里只有一个讨论: 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); 并没有解决任何问题(据我了解,它不应该)
【问题讨论】:
-
对不起,我应该补充一点,我在 localhost 上运行它并且未调用 socket.onError。
标签: java javascript google-app-engine channel-api