Javascript SailsSocket继续尝试重新连接
在与socket.io连接身份验证(and)进行斗争之后,多亏了@sgress454,我意识到了如何让它工作,并且我正在发送身份验证/授权令牌,作为连接中查询的一部分(见下文) 当身份验证失败(无效/过期令牌或处于活动用户状态)时,我返回带有false参数的回调,以指示连接被拒绝 但是在客户端,我不确定应该如何处理它,而且似乎套接字在显式断开连接后仍在尝试重新连接-我一直看到它在尝试重新连接 客户端代码如下所示:Javascript SailsSocket继续尝试重新连接,javascript,socket.io,sails.js,Javascript,Socket.io,Sails.js,在与socket.io连接身份验证(and)进行斗争之后,多亏了@sgress454,我意识到了如何让它工作,并且我正在发送身份验证/授权令牌,作为连接中查询的一部分(见下文) 当身份验证失败(无效/过期令牌或处于活动用户状态)时,我返回带有false参数的回调,以指示连接被拒绝 但是在客户端,我不确定应该如何处理它,而且似乎套接字在显式断开连接后仍在尝试重新连接-我一直看到它在尝试重新连接 客户端代码如下所示: var _onConnectError = function(err) {
var _onConnectError = function(err) {
if (err.description == 400) {
console.log("Connection rejected");
_disconnectAndCleanupSocket();
} else {
console.log("##SOCKET - connect_error", err.description, err);
}
}
var _disconnectAndCleanupSocket = function() {
if (io.socket) {
if (io.socket.isConnected()) {
io.socket.disconnect();
}
io.socket.removeAllListeners();
delete io.socket;
}
};
io.socket = io.sails.connect({ query: "token=" + token});
io.socket.on('connect', _onConnect);
io.socket.on('connect_error', _onConnectError);
io.socket.on('reconnect_error', _onConnectError);
在服务器(config/sockets.js)上,我有:
我曾尝试查找文档并探索响应对象(在开发人员工具中),但我唯一看到的是description
字段,该字段在拒绝时返回400,在没有响应时返回0(例如服务器关闭)
是否有相关的示例/文档?总的来说,我没有找到在非标准情况下使用SailsSocket
的详细说明(除了使用io.sails.connect()
)
处理此类拒绝的正确方法是什么(它不应该作为sails socket.io客户端的一部分来处理吗?)
顺便说一句,我不能自己实例化
SailsSocket
,只能用'io.sails.connect()'函数来实现。那是故意的吗?当我使用connect方法创建套接字,然后才分配事件处理程序时,是否没有“错过”事件的选项?对您的问题的简短回答是,您可以设置重新连接
标志来打开或关闭自动重新连接:
// Disable auto-reconnect for all new socket connections
io.sails.reconnection = false;
// Disable auto-reconnect for a single new socket connection
var mySocket = io.sails.connect({reconnection: false});
就
SailsSocket
创建而言,您认为io.sails.connect()
是创建SailsSocket的唯一方法,这是正确的。由于连接是异步的,因此在调用connect
后立即绑定的任何事件处理程序都将在实际连接发生之前添加,因此您不会错过任何通知。您的问题的简短答案是,您可以设置重新连接
标志以打开或关闭自动重新连接:
// Disable auto-reconnect for all new socket connections
io.sails.reconnection = false;
// Disable auto-reconnect for a single new socket connection
var mySocket = io.sails.connect({reconnection: false});
就
SailsSocket
创建而言,您认为io.sails.connect()
是创建SailsSocket的唯一方法,这是正确的。由于连接是异步的,因此在调用connect
后立即绑定的任何事件处理程序都将在实际连接发生之前添加,因此您不会错过任何通知。感谢您的回复!如果我理解正确,设置重新连接:false
在任何情况下都会阻止重新连接。考虑到我使用的是移动应用程序,连接问题是意料之中的,并且需要我在代码中处理所有重新连接的情况?有没有办法防止在某些情况下重新连接(如我在上面尝试的)?从逻辑上讲(嗯,对我来说:)在拒绝后尝试重新连接是没有意义的,除非发生了一些变化…关于连接/处理程序-应该考虑一下-它是带有事件循环的异步JS:-)reconnection
目前是全有或全无设置。如果要处理随机断开连接,您可以捕获断开连接
事件并执行手动操作。这意味着默认情况下(例如,使用自动连接),被拒绝的套接字将继续尝试重新连接?这不是有点浪费吗?我想对于网络来说,它不那么重要,但我认为sails也用于移动应用程序中……感谢您的回复!如果我理解正确,设置重新连接:false
在任何情况下都会阻止重新连接。考虑到我使用的是移动应用程序,连接问题是意料之中的,并且需要我在代码中处理所有重新连接的情况?有没有办法防止在某些情况下重新连接(如我在上面尝试的)?从逻辑上讲(嗯,对我来说:)在拒绝后尝试重新连接是没有意义的,除非发生了一些变化…关于连接/处理程序-应该考虑一下-它是带有事件循环的异步JS:-)reconnection
目前是全有或全无设置。如果要处理随机断开连接,您可以捕获断开连接
事件并执行手动操作。这意味着默认情况下(例如,使用自动连接),被拒绝的套接字将继续尝试重新连接?这不是有点浪费吗?我想对于web来说,它不那么重要,但我认为sails也用于移动应用程序。。。