我正在使用似乎是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
进行退避,然后重试
msg
是JSON.stringify
的省略结果,该结果有效并且有效载荷很小(最多几十个字节)
服务器最多等待10秒钟,然后返回数据
timeOfLastSuccess
由另一个异步函数用来监视连通性差距(即它没有及时响应)
在Samsung上运行时,我从来没有辍学。
在大火中...我有随机问题。有时他们会在第一个连接周期内停止接收,有时他们会在一个小时的连接周期后停止。
我本来以为这与使javascript进入睡眠状态有关,但是在Android上运行相同的浏览器时,一台设备可以工作,而另一台则不能。
我还应该注意,尽管这正在轮询并陷入僵局,但其他事物(即响应用户按下按钮)仍能够连接到服务器并获得完整响应;这不是。
如何使它停止停转?