socket.io(websockets)的延迟问题

时间:2014-08-14 07:11:54

标签: node.js websocket socket.io-1.0

我们计划使用node.js创建一个实时SPA,我们正在测试延迟,请通过以下链接:

http://173.200.239.98:6060/

有2个区域...当用户将鼠标悬停在右侧的textarea上时,我们在左侧textarea中打印延迟,延迟以毫秒为单位。问题是延迟从0.3秒到6秒不等。网络插座是否正常?或者我做错了什么?

注意: - 服务器位于底特律,美国,我正在从印度钦奈访问服务器。

消息来源代码:

    <!DOCTYPE html>
     <html>
  <head>
    <meta charset='utf-8'/>
  </head>
  <body style='margin:0px' >

    <table>
    <tr>
        <th>latency in milliseconds</th>
        <th>hover to trigger message</th>
    </tr>
    <tr>
        <td><textarea id='message' name='message' rows="20" cols="20" ></textarea></td>
        <td><textarea id='hover' name='hover' rows="20" cols="20" ></textarea></td>
    </tr>
    </table>

    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        jQuery(function($){

            var socket = io.connect();
            var messagearea=document.getElementById("message");
            var workarea=document.getElementById("hover");
            workarea.onmousemove=function(){


                var startTime = Date.now();
                socket.emit('ping',startTime);

            };

            socket.on('pong', function(startTime) {
                var latency = Date.now() - startTime;
                messagearea.innerHTML=  messagearea.innerHTML + latency + '\n';
                messagearea.scrollTop = messagearea.scrollHeight;

            });

        });
    </script>   

  </body>
</html>

3 个答案:

答案 0 :(得分:1)

我通过ping测试和你的应用获得了几乎相同的结果。由于ping测试使您的客户端/服务器脱离了等式并使用了一个众所周知的网络工具 - 如果您在应用程序中获得与ping测试类似的结果,那么您的客户端/服务器运行良好而不是延迟。

现在,当你从印度到底特律进行测试时,你正在世界各地和至少一个主要海洋进行网络连接。如果存在一些延迟并不奇怪,如果延迟变化则不足为奇。只是为了让您知道发生了什么,您需要从印度向底特律发送一些TCP数据包。他们穿越许多不同的路由器和服务提供商以及电缆/光纤,最终到达底特律的服务器。因为它是TCP,所以必须沿反向路线发送确认。然后你的服务器获取数据包,然后以另一种方式发回TCP数据包,再次需要通过返回数据包进行确认。

我运行了你的应用并得到了这些结果:

enter image description here

我在加利福尼亚州圣何塞的位置使用ping -n 20 173.200.239.98进行了ping测试并获得了以下结果:

enter image description here

正如您所看到的,ping测试给出了73-87ms。你的应用游戏74-83ms。那些基本相同。看起来你的客户端和服务器做得很好。

我建议您从您的位置运行自己的ping测试,看看您的ping测试与应用结果之间存在多大差异。

如果您希望查看数据包的路由,并了解每个站点的传输时间信息,可以运行以下命令:

tracert 173.200.239.98

它将显示到达目的地的每个连续主要跳跃的时间(以毫秒为单位)。

答案 1 :(得分:0)

WebSocket中没有任何内在因素可能导致不一致的延迟。如果这就是您所获得的,请尝试在同一网络路径上执行除WebSocket之外的其他操作并观察延迟。例如,ping或FTP。

如果你得到相同的不稳定延迟,那么你就知道它与WebSocket连接没什么关系。如果您没有获得相同的不稳定延迟,那么它可能与您的浏览器或JavaScript有关。也许处理或呈现消息的速度很慢?

基本上你需要开始剥离每一层以尝试发现哪一个正在增加延迟。

答案 2 :(得分:0)

显然它取决于你所在的位置。我认为这就是互联网的运作方式。 德国的延迟时间非常短:120到160毫秒......这很快......