Я использую то, что представляется стандартной парадигмой для кода javascript, для прослушивания сообщений с сервера (на самом деле это приложение умного использования почти тайм-аутов).
Мой целевой набор оченьочень ограничен из-за этого приложения;сейчас у меня есть один Galaxy Tab 8 и три устройства Kindle Fire 7.Галактика работает на Chrome, а Fire - на Silk, но я заменил его на Chrome в надежде решить эту проблему.Оба имеют приложение, установленное для поддержания устройства в активном состоянии, и подключены к одной сети.
Код JavaScript выглядит следующим образом:
var req = new XMLHttpRequest()
var self = this
req.addEventListener ( 'load' , function(){
var messages = JSON.parse ( req.response )
self.timeOfLastSuccess = (new Date()).getTime()
if ( this.verbose )
console.log ( '<ServerIO> Got {0} messages'.format(messages.length) )
messages.forEach ( function(msg){
self.handleInboundMessage ( msg )
})
serverIOStatusVariable.value = ServerIOState.Polling
self._poll()
})
req.addEventListener ( 'error' , function(){
if ( this.verbose )
console.log ( '<ServerIO> Error; trying later' )
self.state = ServerIOState.Offline
self.initializeAgainLater()
})
req.addEventListener ( 'abort' , function(){
if ( this.verbose )
console.log ( '<ServerIO> Abort; trying later' )
self.state = ServerIOState.Offline
self.initializeAgainLater()
})
req.enctype = 'application/json'
req.open ( 'POST' , ioServerURL , true )
req.send(msg)
Некоторые быстрые заметки:
Это асинхронная функция-член, которая называется _poll
initializeAgainLater
выполняет откат, затем повторяет попытку
msg
- это опущенный результат JSON.stringify
, который работает, а полезная нагрузка очень мала (не более десятков байт)
Сервер будет ждать до 10 секунд, прежде чем вернуть данные
timeOfLastSuccess
используется другой асинхронной функцией для отслеживания пробелов в соединении (т. Е. Она не отвечает во времени)
Когда этоработает на Самсунге, у меня никогда не бывает выпадений.
На Пожарах ... У меня случайные проблемы.Иногда они прекращают получать в течение первого цикла соединения, а иногда они останавливаются после часовых циклов соединения.
Сначала я думал, что это связано с переводом JavaScript в спящий режим, но с тем жебраузер работает на Android, одно устройство работает, а другое - нет.
Следует также отметить, что, пока идет опрос и он останавливается, другие вещи (например, в ответ на нажатия пользовательских кнопок) могут подключатьсяна сервер и получите полный ответ;это просто не так.
Как мне заставить это перестать тормозить?