当连接的用户过多或从不受支持的域连接时,我想向客户端提供一个有意义的错误,所以......
我写了一些 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();