socket.io延迟问题(websockets)

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

http://173.200.239.98:6060/ 

有2个区域…当用户将鼠标hover在右侧的textarea上时,我们在左侧的textarea中打印延迟,延迟以毫秒为单位。 问题是延迟从0.3秒到6秒..这是正常的networking套接字? 还是我做错了什么?

注: – 服务器在底特律,美国,我从印度钦奈访问服务器。

源代码:

  <!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> 

pingtesting和应用程序的结果都差不多。 由于pingtesting使您的客户端/服务器不在公式之列,并且使用了众所周知的networking工具 – 如果您在应用中获得与pingtesting类似的结果,那么您的客户端/服务器performance相当好,而不是延迟。

现在,当你从印度到底特律进行testing时,你在世界各地和至less一个主要的海洋中间进行联网。 如果存在一些等待时间并不奇怪,如果这个等待时间不同,这并不奇怪。 为了给你一个想法,你必须发送一些TCP数据包,从印度到底特律。 他们通过许多不同的路由器和服务提供商以及电缆/光纤,最终到达底特律的服务器。 因为是TCP,交货确认必须沿着相反的路线发回。 然后你的服务器得到这个数据包,然后把TCP数据包以另一种方式发送回去,而这又需要用返回数据包来确认。

我跑你的应用程序,并得到这些结果:

在这里输入图像说明

我在加利福尼亚州圣何塞的位置进行了ping -n 20 173.200.239.98的pingtesting,结果如下:

在这里输入图像说明

正如你所看到的,pingtesting给了73-87ms。 你的应用程序游戏74-83ms。 那些基本相同。 这似乎是你的客户端和服务器正在做的很好。

我build议你从你的位置运行你自己的pingtesting,看看你的pingtesting和你的app结果有多大的差别。

如果你想查看你的数据包的路由,并且在每个站点的传输时间上有一些信息,你可以运行这个命令:

 tracert 173.200.239.98 

它会告诉你到达目的地的每一个连续的主要跳跃的时间(以毫秒为单位)。

WebSocket中没有内容会导致不一致的延迟。 如果这就是你所得到的,尝试通过相同的networking路由做别的WebSocket以外的其他事情,并观察延迟。 例如,ping或FTP。

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

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

显然它依赖于你的位置。 我认为这就是互联网的工作原理。 德国的延迟时间相当低:在120到160毫秒之间…这很快…