Websocket连接设置需要相对较长的时间 - 这是正常的吗?

时间:2013-02-28 12:24:12

标签: node.js express websocket

当客户端和服务器都在我的机器上本地运行时,似乎需要大约1秒来设置websocket连接。对我来说这似乎很长一段时间 - 是吗?有人可以将这与他们自己的经历进行比较吗?


详细说明:

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

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

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

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

2 个答案:

答案 0 :(得分:12)

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

Source

答案 1 :(得分:1)

这不正常。

我在Ubuntu上使用Chrome 24并使用以下测试代码(只需启动Chrome Dev控制台并将其粘贴):

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 +基于einaros / ws的WebSocket服务器)
  • ws://echo.websocket.org:130 ms
  • wss://echo.websocket.org:190 ms

因此,即使使用加密连接到公共远程Websocket服务器,在开放事件之前平均仍然不到五分之一秒。我看到的最长时间是250毫秒。对于本地连接,延迟实际上应该只有几毫秒。

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

<强>更新

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

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