这是不正常的。
我在 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 毫秒(基于 Python 的自定义 WebSocket 服务器)
ws://localhost:6090
: 3 ms (自定义 node.js + einaros/ws 基于 WebSocket 服务器)
ws://echo.websocket.org
: 130 毫秒
wss://echo.websocket.org
: 190 毫秒
因此,即使使用与公共远程 Websocket 服务器的加密连接,在打开事件之前平均仍不到五分之一秒。我看到的最长时间是250毫秒。对于本地连接,延迟实际上应该只有几毫秒。
我的猜测是您的服务器设置在接受连接之前正在进行大量处理。也许您正在新的连接处理程序中初始化一堆客户端数据?
更新:
这是一个简单的基于 einaros/ws 的 WebSocket 服务器,它使用上面的客户端测试代码提供 3 毫秒的 onopen 响应:
var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({port: 6090});
wss.on('connection', function(ws) {
console.log("got connection");
});