Kindle Fire Javascript异步HTTP停顿

时间:2019-02-28 01:53:56

标签: javascript android google-chrome

我正在使用似乎是javascript代码的标准范例来侦听来自服务器的消息(确实是巧妙利用几乎超时的应用程序)。

由于此应用程序,我的目标集非常非常有限;现在我有一台Galaxy Tab 8和三台Kindle Fire 7设备。 Galaxy正在运行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进行退避,然后重试

  • msgJSON.stringify的省略结果,该结果有效并且有效载荷很小(最多几十个字节)

  • 服务器最多等待10秒钟,然后返回数据

  • timeOfLastSuccess由另一个异步函数用来监视连通性差距(即它没有及时响应)

在Samsung上运行时,我从来没有辍学。

在大火中...我有随机问题。有时他们会在第一个连接周期内停止接收,有时他们会在一个小时的连接周期后停止。

我本来以为这与使javascript进入睡眠状态有关,但是在Android上运行相同的浏览器时,一台设备可以工作,而另一台则不能。

我还应该注意,尽管这正在轮询并陷入僵局,但其他事物(即响应用户按下按钮)仍能够连接到服务器并获得完整响应;这不是。

如何使它停止停转?

0 个答案:

没有答案