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"); });