我需要使用Node.js
在 Chrome for Android 连续中传输触摸位置到Socket.io
服务器。但是,我猜,传输太快了。前几个值接收服务器(对于第一次触摸约六个值,后来只有两个或三个值),然后似乎有交通堵塞。很多秒钟,服务器什么也得不到。然后,突然所有错过的值突然到达服务器。但不是连续......
我认为我必须通过让客户端仅以500毫秒的间隔发出来减少从客户端到服务器的流量。 This video 演示了以下最后一个选项。
到目前为止我尝试过的(没有成功):
在客户端代码中围绕emit函数包装setInterval函数:
setInterval( function(){
Socket.emit( 'position', posX )
}, 500);
在客户端代码中使用Date.now()
调整发射:
var timestamp = 0;
// ...
if (Date.now() - timestamp >= 500) {
Socket.emit( 'position', posX );
timestamp = Date.now();
}
使用touchmove
库限制客户端代码中的underscore
事件
$('#canvas').on("touchmove", _.throttle(function (ev) {
var e = ev.originalEvent;
var posX = logCounter + " : " + e.targetTouches[0].pageX;
$('#div').text(posX);
socket.emit('position', posX);
logCounter++;
return false;
}, 500));
让我提一下,此代码段会在服务器控制台的网页 AND 中的HTML posX
上记录div
。浏览器按预期每500毫秒记录一次,但服务器(通过Socket.io
)仅按预期开始记录,然后中断,然后立即记录所有缺失值。
该项目位于 Github 。
如何实现平滑(连续)传输?
修改
我发现此问题仅存在于我的Android手机和Android平板电脑上的Chrome浏览器中。 此应用程序适用于Android for Android,Opera for Android和Safari for iOs。
我怎么能超越Chrome?