为什么在使用app引擎Channel API时进行如此多的XHR轮询

时间:2014-08-27 15:23:56

标签: 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中做错了什么。我成功从服务器请求令牌。当我的客户端收到令牌时,我会像这样启动套接字:

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的标记内创建套接字。这是我的问题的原因吗?如果是这样,那么在标签中创建套接字的方式有何不同?

1 个答案:

答案 0 :(得分:1)

轮询是在SDK中模拟通道API的方式,因此您所期待的是预期的。