2011-03-20 31 views
2

我通過一系列的Ajax調用的打開應用程序初始化過程中的信道:即使消息通過,GAE/J Channel API異常?

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); 
     } 
    }; 
}; 

的Servlet:

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; 
}; 

我得到這個錯誤:

WARNING: /_ah/channel/dev com.google.appengine.api.channel.dev.LocalChannelFailureException: Channel for application key null not found.

渠道創建部分非常簡單,所以我不明白問題出在哪裏。 System.out.println (channelToken);回報像

channel--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);沒有解決任何問題(並且,從我的理解,它不應該)

+0

對不起,我應該補充說我正在本地主機上運行它,並且沒有調用socket.onError。 – Aleadam 2011-03-20 05:27:08

回答

4

我能想到的兩個原因這可能發生:

  1. 你重新啓動d ev_appserver.py,而您的客戶端仍在運行。因爲客戶端將使用dev_appserver不知道的「舊」令牌進行輪詢,所以會引發此錯誤。如果是這種情況,只需在重新啓動dev_appserver後刷新客戶端頁面(或者強制它請求新的令牌)。

  2. 正在使用無效令牌調用connect()。這聽起來像你已經排除了,但如果上述不是真的,它可能是值得仔細檢查。

你可以看到什麼記號客戶端輪詢你可以打開螢火蟲或在Chrome開發者控制檯,並查找請求這樣的路徑:

http://localhost:8080/_ah/channel/dev?command=poll&channel=channel-1503856530-alpha-token&client=1

channel-1503856530-alpha-token部分該URL是傳遞給「new goog.appengine.Channel()」的令牌。

+0

事實上,我正在重新啓動服務器,作爲java servlet調試的一部分。我會在今晚測試它,但我很確定是這樣。在繼續之前,我總是刷新客戶端頁面,這可能就是爲什麼其他一切正常工作。 – Aleadam 2011-03-21 17:01:47

+1

我也想感謝您的快速回復。很高興能使用一個知道開發者在那裏幫助的平臺。 – Aleadam 2011-03-21 17:04:08

+0

回答問題是我工作中最喜歡的部分之一!樂意效勞。 – 2011-03-22 16:38:39