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.
上工作
编辑 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.
上工作