Проблема с API канала Google App Engine (Python / Django) - PullRequest
0 голосов
/ 05 января 2011

Привет всем.Я пытаюсь использовать API канала App Engine (задокументировано здесь ), чтобы включить push-обновления для моего приложения.Однако я сталкиваюсь с некоторыми проблемами при настройке механизма инициализации канала связи.

Проблема заключается в том, что при загрузке рассматриваемой страницы я получаю отладочные отпечатки для обработчиков onError и onClose, ноЯ не получаю отладочную печать для обработчика onOpen.Больше ничего не происходитНиже приведен вывод на консоль javascript с использованием инструментов разработчика Google Chrome:

Ресурс интерпретируется как скрипт, но передается с типом 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 не отображаетсячтобы даже быть призванным еще.Я знаю, что, должно быть, упускаю что-то простое, но если кто-то может помочь с этим, я был бы очень признателен!

1 Ответ

5 голосов
/ 05 января 2011

Мне кажется, вы используете унифицированный токен канала.Сервер должен вызвать channel.create_channel, чтобы получить токен для этого клиента, который вы затем передадите конструктору объекта Channel.

...