Google App Engine频道API(Python / Django)出现问题

问题描述 投票:0回答:1

大家好 我正在尝试使用App Engine Channel API( 在此处记录 )来为我的应用程序启用推送更新。 但是,在设置初始化通信通道的机制时遇到了一些问题。

问题是,当我加载有问题的页面时,我得到了onError和onClose处理程序的调试打印,但没有得到onOpen处理程序的调试打印。 什么都没发生。 以下是使用Google Chrome开发者工具的javascript控制台输出:

资源被解释为脚本,但以MIME类型text / html传输。 ..... jsapi:-1

onError ..... 443088:88

onClose ..... 443088:80

这是我的Django模板中(大部分)javascript代码的相关部分:

<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似乎还没有被调用。 我知道我一定会缺少一些简单的东西,但是如果有人可以提供帮助,我将不胜感激!

javascript django google-app-engine push channel
1个回答
5
投票

在我看来,您正在使用统一渠道令牌。 服务器需要调用channel.create_channel来检索此客户端的令牌,然后将其传递给Channel对象的构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.