2011-01-05 145 views
0

嘿,大家。我正在嘗試使用App Engine Channel API(文檔here)爲我的應用程序啓用推送更新。但是,我遇到了一些設置初始化通信通道機制的問題。Google App Engine通道API問題(Python/Django)

問題是,當我加載有問題的頁面時,我得到了onError和onClose處理程序的調試打印,但是我沒有得到onOpen處理程序的調試打印。沒有其他事情發生以下是使用Google Chrome開發人員工具的javascript控制檯輸出:

將資源解釋爲腳本,但以MIME類型text/html傳輸。 ..... JSAPI:-1

的onError ..... 443088:88

的OnClose ..... 443088:80

這裏是相關部分(主要是)JavaScript代碼從我的Django的模板:

<script type="text/javascript"> 
onOpen = function() { 
    console.debug('onOpen'); 

    var xhrArgs = { 
     url: '/channel/connect/', 
     headers: { 'Content-Type': 'application/json' }, 
     postData: dojo.toJson({ 'channel_token': '{{ channel_token }}' }), 
     handleAs: 'text', 
     load: function(response) { 
     alert('success'); 
     }, 
     error: function(error) { 
     alert('failure: ' + error); 
     } 
    }; 
    var deferred = dojo.xhrPost(xhrArgs); 
}; 

onClose = function() { 
    console.debug('onClose'); 
}; 

onMessage = function(msg) { 
    console.debug('onMessage'); 
}; 

onError = function() { 
    console.debug('onError'); 
}; 

openChannel = function() { 
    var channel = new goog.appengine.Channel('{{ channel_token }}'); 
    var handler = { 
    'onopen': onOpen, 
    'onclose': onClose, 
    'onmessage': onMessage, 
    'onerror': onError 
    }; 
    var socket = channel.open(handler); 
    socket.onopen = onOpen; 
    socket.onmessage = onMessage; 
}; 

setTimeout(openChannel, 100); 
</script> 

如果我理解正確這個,那麼服務器端代碼是不是在這一點上相關,因爲的OnOpen不會出現甚至還調用。我知道我必須錯過簡單的事情,但如果有人能夠幫助我,我會非常感激!

回答

5

它看起來像我在使用單元化的通道令牌。服務器需要調用channel.create_channel來爲這個客戶端檢索一個令牌,然後傳遞給Channel對象的構造函數。

+0

謝謝,這樣做! – 2011-01-06 06:43:55