当客户端和服务器都在我的机器上本地运行时,似乎需要大约1秒来设置websocket连接。对我来说这似乎很长一段时间 - 是吗?有人可以将这与他们自己的经历进行比较吗?
详细说明:
我在客户端(Chrome 25,Windows7 64)上有这样的websocket请求:
this.ws = new WebSocket('ws://' + host + ':' + port);
在服务器端,我有运行ExpressJS的Node和处理升级和WS连接的einaros/ws。
我在客户端上计时,从新WebSocket()
到ws.onopen
事件之前。
答案 0 :(得分:12)
我找到了这个问题的明确答案。显然,使用localhost
会导致浏览器首先尝试连接ipv6
,然后在超时1秒后回退到ipv4
。使用127.0.0.1
解决了该问题,因为它首先尝试使用ipv4
进行连接。
答案 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");
});