それは正常ではありません。
次のテスト コードを使用して 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 ミリ秒 (カスタム python ベースの WebSocket サーバー)
ws://localhost:6090
: 3 ミリ秒 (カスタム node.js + einaros/ws ベースの WebSocket サーバー)
ws://echo.websocket.org
:130ミリ秒
wss://echo.websocket.org
:190ミリ秒
したがって、パブリック リモート Websocket サーバーへの暗号化された接続を使用しても、open イベントまでの平均時間は 5 分の 1 秒未満です。私が見た最大時間は250msでした。ローカル接続の場合、遅延は実際には数ミリ秒にすぎません。
私の推測では、サーバーのセットアップは、接続を受け入れる前に一連の処理を行っていると思われます。おそらく、新しい接続ハンドラで大量のクライアント データを初期化しているのではないでしょうか?
更新:
以下は、上記のクライアント テスト コードを使用して 3 ミリ秒の onopen 応答を返す単純な einaros/ws ベースの WebSocket サーバーです。
var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({port: 6090});
wss.on('connection', function(ws) {
console.log("got connection");
});