套接字.我的安卓手机似乎延迟了

socket.io seems to be delayed on my Android phone

本文关键字:延迟 手机 我的 套接字      更新时间:2023-09-26

EDIT 2:

我使用服务器发送的事件(SSE)观察到相同的行为。请看这里的例子。(当然,这是单向的)。不过,在我的Nexus 5上,它似乎更健壮,也不会经常卡顿。而且它恢复/重新连接快。

编辑1:

参见Websocket interval…所以。


我用的是装有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时,插座。Io 似乎按"块"行事。如您所见,我的客户机/服务器执行一个"乒乓球"游戏,每隔1秒发出一条新消息。事实是,我正确地接收了~10个第一个消息(即I在10秒内从0增加到10),然后它阻塞了几秒钟,然后它继续传输。注意,我把页面放在手机的顶部,它没有进入pause state (?)

我的问题是:如何避免这种情况,以确保emit将通过web套接字发送,只要它被调用?我是不是漏掉了什么。io设置?我忽略了一些关于web套接字,这种行为是正常的吗?

任何想法?

谢谢!

我会回答我自己的问题…

我尝试了websockets,甚至只有服务器到客户端通信和服务器发送的事件在我的手机上(Nexus 5与Lollipop 5.1和旧的LG p930与Gingerbread 2.3.5),它们都不能很好地使用这些技术。5点以后通讯中断了……10或60秒,但它总是中断。

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

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