javascript - 为什么使用 App Engine Channel API 时需要进行如此多的 XHR 轮询

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

我正在尝试使用 App Engine Channel API以避免轮询我的客户端中的更新。问题是我在启动套接字后看到 Chrome 控制台中发送连续的 XHR 数据包流。他们都说:

XHR finished loading: GET "http://localhost:8080/_ah/channel/devcommand=poll&channel=xxxOMITTEDxxx-channel-yyyOMITTEDyyy-zzzOMITTEDzzz-1&client=1". jsapi:5406goog.net.XhrIo.send jsapi:5406goog.net.XhrIo.send jsapi:5352goog.appengine.DevSocket.poll_

在服务器尝试发送消息之前,我不会期望任何 XHR 消息。我正在使用 Python dev_appserver。

也许我的 Javascript 做错了什么。我已成功从服务器请求 token 。当我的客户端收到 token 时,我像这样启动套接字:

function listen_to_channel(msg) {
  console.log('--- server response to channel request: ' + JSON.stringify(msg));

  // open a channel socket
  var channel = new goog.appengine.Channel(msg.token);

  var socket = channel.open();
  socket.onopen = function(){ console.log('socket.onopen')};
  socket.onmessage = function(msg){ console.log('socket.onmessage: ' + msg.data)};
  socket.onerror = function(err){ console.log('socket.onerror: ' + err.description + ', ' + err.code)};
  socket.onclose = function(){ console.log('socket.onclose')};
}

我从 jQuery 运行该代码,如下所示:

$(document).ready(function() {
    $.get('/admin/channel', {clientID:1}, listen_to_channel, 'json')
});

我像这样链接依赖项:

<head>
  <script type="text/javascript" src="/_ah/channel/jsapi"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <script src="javascript/admin.js"></script>
</head>

示例代码清楚表明套接字应该在 HTML DOM 的标记内创建。这是我的问题的原因吗?如果是这样,在标签内创建套接字有何不同?

最佳答案

轮询是 SDK 中模拟 channel API 的方式,因此您所看到的结果是预期的。

关于javascript - 为什么使用 App Engine Channel API 时需要进行如此多的 XHR 轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531106/

相关文章:

javascript - Ember.js 中的嵌套路由和模板替换

javascript - double forEach 到 double for 循环

Python os.path.isdir 对于点返回 true

python - 我应该在哪里为我的猜谜游戏放置一个 if 函数?

javascript - 具有 flex 图像效果的动画(CSS3 & JS)

javascript - 使用 Bootstrap 将 jQuery 应用于正文(背景)但不应用于模态

python - Matplotlib 不绘制线图;十字形、圆形和三角形都可以

google-app-engine - 启动/停止 Google 应用引擎自定义运行时实例

google-app-engine - 如何使用 gcloud-node 在 Google 数据存储上保存超过 1500 字节的文本?

python - Django 项目无法强制 Google Appengine 重定向到 https