socket.io似乎在我的Android手机上延迟

编辑2:

我观察到使用服务器发送的事件(SSE)相同的行为。 看这里的例子。 (当然,这是一种方式)。 不过,在我的Nexus 5上它似乎更强大,并且不会经常出现问题。 它也快速恢复/重新连接。


编辑1:

另见Websocket间隔…在SO上。


我正在使用Nexus 5与Chrome 45通过路由器通过WiFi与我的笔记本电脑进行通信。

我桌面上的服务器使用node.js版本0.12.7编码,我使用socket.io 1.3.6。 这里是服务器的代码:

'use strict' const app = require( 'express' )(); app.get( '/', function( req, res ){ res.render( 'test_socketio_client.ejs' ); }); let httpServer = app.listen( 8000 ); const io = require( 'socket.io' )( httpServer ); let i = 0; io.on( 'connection', function( socket ){ socket.on( 'req', function( data ){ console.log( data ); socket.emit( 'res', {res:'From server', i:i.toString()} ); ++i; }); }); 

这是我的客户的代码:

 <html> <head> <meta charset="utf-8"/> <title>Test Socket.io</title> </head> <body> <h1>Test Socket.io</h1> <hr/> <p>From server: <span id="test1"></span></p> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); var i = 0; var f = function(){ socket.emit( 'req', {req:'From client', i:i.toString()} ); }; socket.on( 'res', function( data ){ $("#test1").html( data.i ); ++i; setTimeout( f, 1000 ); }); f(); </script> </body> </html> 

如果我在桌面上使用http://localhost:8000的浏览器,则没有任何问题,但是当我通过家庭无线networking使用Nexus 5 / Chrome 45时, socket.io似乎performance为“块”。 如你所见,我的客户端/服务器执行一个“乒乓”游戏,在1秒后发出一条新消息。 事实是,我正确接收了〜10个第一条消息(即我在10秒内从0增加到10),然后它阻塞了几秒钟,然后它恢复发送。 请注意,当然,我保留在我的手机顶部的页面,它不进入暂停状态(?)

我的问题是:如何避免这一点,以确保emit一旦被呼叫通过networking套接字发送? 我错过了socket.io设置的东西吗? 我忽略一些关于networking套接字,这种行为是正常的?

任何想法?

谢谢!

我会回答我自己的问题

我尝试了两种websocket ,即使在我的手机上只有服务器到客户端的通信和服务器发送的事件 (使用Lollipop 5.1的Nexus 5和使用Gingerbread 2.3.5的旧的LG p930),这些技术都无法正常工作。 通信在5 … 10或60秒后中断,但总是中断。

我将使用重复查询的AJAX。 每0.5秒查询一次,我就不会失去沟通。 这对我目前的项目来说已经足够了。

但我会很高兴看到SSE和/或websockets在Chrome 45 / Android 5.1上工作。