1

我们计划使用 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>
4

3 回答 3

3

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

现在,当您从印度到底特律进行测试时,您正在建立网络,跨越半个地球,至少跨越一个主要海洋。如果有一些延迟并不奇怪,如果延迟变化也不奇怪。只是为了让您了解必须发生的事情是您将一些 TCP 数据包从印度发送到底特律。它们经过许多不同的路由器和服务提供商以及电缆/光纤,最终到达底特律的服务器。因为它是 TCP,所以必须沿反向路由发回交付确认。然后您的服务器获取数据包并以另一种方式发送 TCP 数据包,这再次需要通过返回数据包进行确认。

我运行了您的应用程序并得到了以下结果:

在此处输入图像描述

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

在此处输入图像描述

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

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

如果您想查看您的数据包所采用的路线以及到每个站点的运输时间信息,您可以运行以下命令:

tracert 173.200.239.98

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

于 2014-08-14T08:17:40.300 回答
0

WebSocket 中没有任何内在的东西会导致不一致的延迟。如果这就是您所得到的,请尝试在同一网络路由上执行 WebSocket 以外的其他操作并观察延迟。例如,ping 或 FTP。

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

基本上,您需要开始剥离每一层以尝试发现哪一层增加了延迟。

于 2014-08-14T07:21:06.813 回答
0

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

于 2014-08-14T07:21:41.157 回答