Appengine API отладки канала

Я использую API канала appengine (с отложенными задачами), но, похоже, он не работает.

Вот мой код сервера вкратце:

Class Handler(webapp2.RequestHandler):
  def get(self):
    path = jinja_environment.get_template('templates/new_console.html')
    token = channel.create_channel('some_key')
    # Deferring the task.
    deferred.defer(_task, token)
    args = {}
    args['token'] = token
    self.response.out.write(path.render(args))



def _task(token):
  FeedbackThreadModel(id='id').put()
  time.sleep(60)
  channel.send_message(token, 'done')

А вот мой javascript-клиент

<html>
  <head>
    <script type="text/javascript" src="/_ah/channel/jsapi"></script>
    <script>
        channel = new goog.appengine.Channel('{{ token }}');
        socket = channel.open();
        socket.onmessage = onMessage;
        onMessage = function() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', '/secondpage');
            xhr.send();
        };
      </script>
  </head>

Я ожидаю, что запрос GET будет инициирован на URL: '/secondpage' после завершения задачи, но этого не происходит. Что я делаю неправильно ?


person Shan    schedule 11.02.2016    source источник
comment
сколько времени на самом деле занимает ваша задача? Вы пытались отложить задачу с помощью обратного отсчета, поскольку это, вероятно, происходит до того, как браузер сможет создать канал. Также проверьте журналы, как в браузере, так и на серверах. Что происходит на самом деле?   -  person Paul Collingwood    schedule 11.02.2016
comment
@PaulCollingwood Спасибо, попробовал, но не помогло.   -  person Shan    schedule 12.02.2016


Ответы (1)


Теперь это, кажется, работает. По-видимому, javascript запроса сокета должен быть в теле html, а не в голове. Рабочий javascript выглядит так:

<html>
  <body>
    <script type="text/javascript" src="/_ah/channel/jsapi"></script>
    <script>
        channel = new goog.appengine.Channel('{{ token }}');
        socket = channel.open();
        socket.onmessage = function() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', '/secondpage');
            xhr.send();
        };
      </script>
  </body>
person Shan    schedule 12.02.2016