Kindle Fire Javascript Асинхронный HTTP Stalling - PullRequest
0 голосов
/ 28 февраля 2019

Я использую то, что представляется стандартной парадигмой для кода 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, одно устройство работает, а другое - нет.

Следует также отметить, что, пока идет опрос и он останавливается, другие вещи (например, в ответ на нажатия пользовательских кнопок) могут подключатьсяна сервер и получите полный ответ;это просто не так.

Как мне заставить это перестать тормозить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...