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

2024-01-22

EDIT 2:

我观察到使用相同的行为服务器发送的事件 (SSE)。参见示例here http://cjihrig.com/blog/server-sent-events-in-node-js/。 (当然,这是一种方式)。然而,它在我的 Nexus 5 上似乎更强大,并且不会经常滞后。它还可以快速恢复/重新连接。


EDIT 1:

也可以看看Websocket 间隔... https://stackoverflow.com/questions/18233636/websocket-interval-performance-problems-on-mobile-devices on 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 时,套接字.io似乎是按“块”行事。如您所见,我的客户端/服务器执行“乒乓球”游戏,1 秒后发出一条新消息。事实是,我正确接收了大约 10 条第一条消息(即 i 在十秒内从 0 增加到 10),然后它阻塞几秒钟,然后恢复传输。请注意,我当然将顶部的页面保留在手机上,它不会进入pause状态 (?)

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

任何想法?

Thanks!


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

我都尝试过网络套接字甚至只有服务器到客户端的通信服务器发送的事件在我的手机上(带有 Lollipop 5.1 的 Nexus 5 和带有 Gingerbread 2.3.5 的旧 LG p930),它们都不能与这些技术配合良好。通信会在 5 ... 10 或 60 秒后中断,但总是会中断。

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

但我很高兴看到 SSE 和/或 websockets 在 Chrome 45/Android 5.1 上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在我的 Android 手机上,socket.io 似乎有延迟 的相关文章