socket.io 似乎延迟了我的 Android phone

socket.io seems to be delayed on my Android phone

编辑 2:

我使用 服务器发送的事件 (SSE) 观察到相同的行为。请参阅示例 here。 (当然,这是一种方式)。但是,它在我的 Nexus 5 上似乎更强大,而且不会经常滞后。而且它 recovers/reconnects 很快。


编辑 1:

另见 Websocket interval... SO。


我正在使用 Chrome 45 的 Nexus 5 通过路由器通过 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 浏览器没有问题,但是当我通过家庭 wifi 网络使用 Nexus 5/Chrome 45 时,socket.io 似乎表现得像 "chunks"。如您所见,我的 client/server 执行 "ping pong" 游戏,1 秒后发出一条新消息。事实是我正确地收到了大约 10 条第一条消息(即我在 10 秒内从 0 增加到 10)然后它阻塞了几秒钟,然后它恢复传输。请注意,当然,我保留了 phone 顶部的页面,它不会进入 pause 状态 (?)

我的问题是:如何避免这种情况,以确保 emit 会在调用后立即通过网络套接字发送?我是否错过了 socket.io 设置的内容?我是否忽略了有关网络套接字的某些内容并且这种行为是正常的?

有什么想法吗?

谢谢!

我会回答我自己的问题...

我在我的手机(Nexus 5使用 Lollipop 5.1 和带有 Gingerbread 2.3.5 的旧 LG p930),其中 none 与这些技术配合良好。通信在 5 ... 10 或 60 秒后中断,但它总是中断。

我将使用 AJAX 进行重复查询。每 0.5 秒查询一次,我从未失去通信。这对我目前的项目来说已经足够了。

但我希望看到 SSE and/or websockets 在 Chrome 45/Android 5.1.

上工作