使用Socket.io

时间:2015-12-15 17:22:16

标签: node.js socket.io delay throttling

我需要使用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?

0 个答案:

没有答案