アプリの初期化中に一連の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、ubuntu10.10を使用しています
その例外をグーグルで検索すると、ここで1つのディスカッションしか見つかりませんでした: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);も何も解決しませんでした(そして、私が理解していることから、それは解決すべきではありません)