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

UpT*_*eek 9 websocket node.js express

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


细节:

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

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

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

从新手WebSocket()ws.onopen活动之前,我在客户端上计时.

Jea*_*erc 15

我找到了这个问题的明确答案.显然,使用localhost导致浏览器尝试连接到ipv6第一个然后回退到ipv41秒超时后.问题通过使用解决,127.0.0.1因为它首先尝试连接使用ipv4.

资源


kan*_*aka 2

这不正常。

我在 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");
    };
}
Run Code Online (Sandbox Code Playgroud)

以下是我针对uri的各种值获得的一些平均结果:

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

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

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

更新

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

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