2013-07-09 59 views
0

我想創建儘可能小的GAE應用程序來顯示通道api的使用。 我在python中有兩個處理程序,第一個「TestPage」發出如下所示的html。第二個「SendPage」嘗試通過通道將消息發送到測試頁面。用於TestPage的代碼是頻道在微不足道的GAE應用程序沒有得到'onmessage'

class TestPage(Handler): 
    def get(self): 
     token = channel.create_channel("1") 
     self.render("test.html", token = token) 

它只是與「1」的ID創建信道,並用()從create_channel傳遞迴令牌reders的頁面。

的SendPage就是:

class SendPage(Handler): 
    def get(self): 
     channel.send_message("1", "hello") 
     self.write("sent hello to 1") 

的HTML是小我能得到它:

<!DOCTYPE HTML> 
<html> 
<body> 
<br>Token is {{ token }} 
<br> 
<div id="debug">_</div> 

<!-- 
<script src="https://talkgadget.google.com/talkgadget/channel.js"></script> 
--> 
<script src="static/channel.js"></script> 
<script defer="defer"> 
    function debug(s) { 
     document.getElementById("debug").innerHTML = s; 
    } 

    var channel = new goog.appengine.Channel({{ token }}); 
    var socket = channel.open(); 
    socket.onopen = function(e) { 
     debug("open"); 
    } 
    socket.onclose = function(e) { 
     debug("close"); 
    } 
    socket.onerror = function(e) { 
     debug("error"); 
    } 
    socket.onmessage = function(e) { 
     debug("message"); 
    } 
    debug("ready"); 

</script> 
</body> 
</html> 

所以,內部鍍鉻我拉起來TestPage,我看到「準備就緒」的消息。然後我在另一個選項卡中拉起發送頁面。並看到「發送的消息」。然後,當我回到TestPage時,我希望已經將「準備好」替換爲「消息」。但這從來沒有發生過。沒有任何套接字處理函數被調用。

我被卡住的時刻,將不勝感激任何幫助或建議。

謝謝。

+0

順便說一句,我用dev_appserver.py在我的本地主機上運行這個。頻道api的源代碼位於本地計算機上,並從https://talkgadget.google.com/talkgadget/channel.js複製。請詢問您是否有任何問題。謝謝。 –

回答

0

好吧,我想通了。有兩個問題。首先,模板線

var channel = new goog.appengine.Channel({{ token }}); 

應該已經

var channel = new goog.appengine.Channel("{{token}}"); 

,因爲它是令牌是像「通道2052893164-1373347311-1」它靜靜地計算爲一個數字。

其次,對於channel.js正確的腳本是

<script type="text/javascript" src="/_ah/channel/jsapi"></script> 

我引用的其它腳本來自其他堆棧溢出的答案,我想他們沒有正確地應用了這一問題。

謝謝。