nodejs + WebSockets - 拒绝带有消息的连接
nodejs + WebSockets - reject the connection with a message
我想在连接太多用户或从不受支持的域连接时向客户端提供一个有意义的错误,所以......
我写了一些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();
我是WebSocket-Node的作者,我也在GitHub上发布了对相应问题的回应:https://github.com/Worlize/WebSocket-Node/issues/46
遗憾的是,WebSocket 协议没有提供任何特定的机制,用于在拒绝客户端连接时在此阶段提供关闭代码或原因。 拒绝的形式是 HTTP 响应,HTTP 状态为 40x 或 50x。 该规范允许这样做,但没有定义客户端应尝试从此类响应中分离出任何特定错误消息的特定方式。
实际上,只有当您拒绝来自不允许的来源的用户(即来自另一个网站的某人试图在未经许可的情况下将用户连接到您的 websocket 服务器(或当用户没有连接权限(即他们未登录(时,才应在此阶段拒绝连接。后一种情况应由您网站上的其他代码处理:如果用户未登录,则不应尝试连接 websocket 连接。
WebSocket-Node 允许您在此处指定的代码和原因是 HTTP 状态代码(例如 404、500 等(以及在响应中包含非标准"X-WebSocket-Reject-Reason"HTTP 标头的原因。在分析数据包嗅探器(如 WireShark(的连接时,它最有用。当以这种方式拒绝连接时,没有任何浏览器能够向客户端 JavaScript 代码提供拒绝代码或原因,因为 WebSocket 规范中没有提供。
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 如果没有互联网连接,Android WebView离线消息
- 使用chrome扩展,如何使用长寿命连接(端口)将消息从后台脚本传递到内容脚本
- Chrome 消息传递.未捕获错误:连接到扩展时出错
- Jquery 移动错误消息,当没有互联网连接加载谷歌地图
- Jquery移动检查时没有互联网连接显示错误消息,而不是加载谷歌地图
- nodejs + WebSockets - 拒绝带有消息的连接
- LinkedIn向连接发送消息
- 如何将自定义消息处理程序与 Strophe 连接
- 如何使用html-jquery或java脚本在互联网连接不可用时显示对话框消息
- 一种管理WebSocket的方法,以便向所有连接的用户发送管理消息
- 断开网络连接时出现消息(SamsungSmart电视应用程序)
- 如何允许表单元素具有多个类,并为错误消息连接/切片
- 如何在页面关闭时可靠地运行代码(例如,网站聊天中的“断开连接”消息)
- Node.js/Sockets-用户连接,它加载以前的消息,但它将消息加载到所有其他聊天用户,而不是刚刚连接的用户
- NodeJS ZeroMQ-当生产者准备好在连接后发送消息时
- 如何从连接的Android设备查看Cordova日志消息?
- 如何使用Java服务器发送消息到特定的websocket连接
- 当没有互联网连接时显示警告消息
- 使用webSocket向特定的连接用户发送消息