Websocket连接设置需要相当长的时间 – 这是正常的吗?

当客户端和服务器都在我的机器上本地运行时,似乎需要大约1秒来build立websocket连接。 这对我来说似乎相当长时间 – 是吗? 任何人都可以比较这与他们自己的经验?


细节:

我在客户端(Chrome 25,Windows7 64)上有这样的websocket请求:

this.ws = new WebSocket('ws://' + host + ':' + port);

在服务器端,我有运行ExpressJS的 Node和einaros / ws处理升级和WS连接。

我在客户端计时,从新的WebSocket()ws.onopen事件之前。

我find了这个问题的明确答案。 显然,使用localhost会导致浏览器先尝试连接到ipv6然后在1秒超时后回ipv4 。 这个问题是通过使用127.0.0.1来解决的,因为它将首先尝试使用ipv4进行连接。

资源

这是不正常的。

我使用以下testing代码在Ubuntu上使用Chrome 24(只需启动Chrome开发人员控制台并将其粘贴):

 function test_ws(uri){ start = new Date().getTime(); ws = new WebSocket(uri); ws.onopen = function(){ console.log("onopen of", uri, "in", (new Date().getTime() - start), "ms"); }; } 

下面是我得到的各种uri值的平均结果:

  • ws://localhost:6080 :20 ms(基于自定义python的WebSocket服务器)
  • ws://localhost:6090 :3 ms(自定义node.js +基于WebSocket服务器的einaros / ws)
  • ws://echo.websocket.org :130毫秒
  • wss://echo.websocket.org :190毫秒

所以,即使使用到公共远程Websocket服务器的encryption连接,在开放事件之前,平均还不到五分之一秒。 我看到的最长时间是250ms。 对于本地连接,延迟应该只有几毫秒。

我的猜测是你的服务器设置在接受连接之前正在做一堆处理。 也许你正在初始化一堆客户端数据在新的连接处理程序?

更新

这里是一个简单的基于einaros / ws的WebSocket服务器,它使用上面的客户端testing代码给出3ms onopen响应:

 var WebSocketServer = require('ws').Server , wss = new WebSocketServer({port: 6090}); wss.on('connection', function(ws) { console.log("got connection"); });