【问题标题】:Debugging Channel API Appengine调试通道 API Appengine
【发布时间】:2016-02-11 19:13:06
【问题描述】:

我正在使用 appengine 通道 api(带有延迟任务),但它似乎不起作用。

这是我的服务器代码要点:

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>

我希望在任务完成后向 URL:'/secondpage' 发起 GET 请求,但这并没有发生。我做错了什么?

【问题讨论】:

  • 您的任务实际需要多长时间?您是否尝试过通过倒计时来延迟任务,因为它可能发生在浏览器创建通道之前。还要检查浏览器和服务器上的日志。实际发生了什么?
  • @PaulCollingwood 谢谢,试过但没有帮助。

标签: javascript google-app-engine channel-api


【解决方案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>

【讨论】:

    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2018-08-14
    • 2020-04-26
    相关资源
    最近更新 更多