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

Javascript socket.io在我的Android手机上似乎被延迟了,javascript,node.js,websocket,socket.io,wifi,Javascript,Node.js,Websocket,Socket.io,Wifi,编辑2: 我使用服务器发送事件(SSE)观察到了相同的行为。参见示例。(当然,这是一种方式)。然而,在我的Nexus5上,它似乎更健壮,而且不经常滞后。此外,它还可以快速恢复/重新连接 编辑1: 另见下文 我正在使用带有Chrome 45的Nexus 5通过路由器通过wifi与我的笔记本电脑通信 我桌面上的服务器使用node.js版本0.12.7编码,我使用socket.io 1.3.6。以下是服务器的代码: 'use strict' const app = require( 'expres

编辑2:

我使用服务器发送事件(SSE)观察到了相同的行为。参见示例。(当然,这是一种方式)。然而,在我的Nexus5上,它似乎更健壮,而且不经常滞后。此外,它还可以快速恢复/重新连接


编辑1:

另见下文


我正在使用带有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>

测试套接字.io
测试套接字.io

从服务器:

var socket=io(); var i=0; var f=函数(){ emit('req',{req:'From client', i:i.toString()}); }; socket.on('res',函数(数据){ $(“#test1”).html(data.i); ++一,; 设置超时(f,1000); }); f();
如果我将桌面上的浏览器与
http://localhost:8000
没有问题,但当我通过家庭wifi网络使用Nexus 5/Chrome 45时,socket.io的行为似乎是“块”。如您所见,我的客户机/服务器执行“乒乓”游戏,在1秒后发出新消息。事实上,我正确地接收到了前10条消息(即,我在10秒内从0增加到10),然后它阻塞几秒钟,然后它恢复传输。请注意,当然,我将页面保留在手机顶部,它不会进入暂停状态(?)

我的问题是:如何避免这种情况,以确保
emit
一经调用就会通过web套接字发送?我是否错过了socket.io设置?我是否忽略了有关web套接字的某些内容,而这种行为是正常的

有什么想法吗


谢谢

我会回答我自己的问题

我在我的手机上尝试了websockets,甚至只使用服务器到客户端的通信,也尝试了服务器发送事件(Nexus 5带有棒棒糖5.1,旧LG p930带有姜饼2.3.5),但没有一款能很好地使用这些技术。5点后通讯中断。。。10秒或60秒,但它总是中断

我将在重复查询中使用AJAX。每0.5秒查询一次,我从未失去联系。这将是我目前的项目足够了


但我希望看到SSE和/或websockets在Chrome 45/Android 5.1上运行。

好吧,我有一个由sockets远程控制的移动音乐应用程序,是的,有时我会单击next(),等待,然后再次单击3或4次,但什么都没有发生,几秒钟后它会向前跳4首曲目。我不知道是电话、电源管理、wifi、路由器还是其他什么,但移动网络Socket似乎不像台式机那样总是打开和准备就绪。我确实收到了这些消息,它们只是暂停并聚集在一起,而不是平滑地流出来,因为它们是由服务器发送的。。。哦,我也没有使用socket.io…@dandavis谢谢你提供的信息。也许有人对某些设置有想法?请记住,SSE使用HTTP而不是套接字。关于套接字——还要记住,浏览器在手机上的实现是完全不同的,而WebSocket在不同的手机上总是有问题的。在线搜索一些具有实现级别和稳定性的图表。还可以在手机上启用调试,并在发射时开始记录时间戳事件,这样您就可以确定延迟事件不是浏览器的错。@AndreyPopov谢谢您的提示。我看到了SSE和websocket之间的区别。实际上,我想使用web套接字使服务器能够通知浏览器,并使浏览器能够通知服务器。但我想我会选择SSE/AJAX,如果它们在移动设备上更稳定的话。@AndreyPopov当然会很好!:-)但我的工作比理论更实际,我必须找到另一种方法来实现我的目标。我只是简单地说,移动设备不能(可能是出于设计)通过wifi长时间保持插座连接???