接続しているユーザーが多すぎる場合、またはサポートされていないドメインから接続している場合に、クライアントに意味のあるエラーを提供したいので...
WebSocket サーバー コードをいくつか書きました。
var http = require('http');
var httpServer = http.createServer(function (request, response)
{
// i see this if i hit http://localhost:8001/
response.end('go away');
});
httpServer.listen(8001);
// https://github.com/Worlize/WebSocket-Node/wiki/Documentation
var webSocket = require('websocket');
var webSocketServer = new webSocket.server({ 'httpServer': httpServer });
webSocketServer.on('request', function (request)
{
var connection = request.reject(102, 'gtfo');
});
そして、いくつかの WebSocket クライアント コード:
var connection = new WebSocket('ws://127.0.0.1:8001');
connection.onopen = function (openEvent)
{
alert('onopen');
console.log(openEvent);
};
connection.onclose = function (closeEvent)
{
alert('onclose');
console.log(closeEvent);
}
connection.onerror = function (errorEvent)
{
alert('onerror');
console.log(errorEvent);
};
connection.onmessage = function (messageEvent)
{
alert('onmessage');
console.log(messageEvent);
};
私が得るのは、コンソールに記録されalert('onclose');
たCloseEvent
オブジェクトだけで、ステータスコードやメッセージは見つかりません。ws://localhost:8001
httpServer コールバックを介して接続すると、機能しないため、そこでキャッチできません。RFC では、問題が発生したときに 101 以外のステータス コードを送信できるはずですが、Chrome はコンソールにエラーをスローしますUnexpected response code: 102
。を呼び出すとrequest.reject(101, 'gtfo')
、期待どおり、成功したことを意味するハンドシェイク エラーが発生します。
他に何ができるか本当にわかりません。ChromeのWebSocket実装でサーバーの応答を取得することは今のところ不可能ですか?
ETA:それまでの間、これは非常に厄介なハックです。
var connection = request.accept(null, request.origin);
connection.sendUTF('gtfo');
connection.close();