Я пытаюсь использовать App Engine Channel API, чтобы избежать опроса обновлений для моего клиента. Проблема в том, что я вижу непрерывный поток XHR-пакетов, отправленных в консоли Chrome после запуска сокета. Все они говорят:Почему так много опроса XHR при использовании приложения API канала API
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. Является ли это причиной моей проблемы? Если да, то что создает сокет в теге по-разному?
Ах! Благодарю. У вас есть ссылка? – cyrf
Вы можете увидеть код: https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/devappserver2/channel.py – Greg