我正在尝试使用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的标记内创建套接字。这是我的问题的原因吗?如果是这样,那么在标签中创建套接字的方式有何不同?
答案 0 :(得分:1)
轮询是在SDK中模拟通道API的方式,因此您所期待的是预期的。