Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SailsSocket继续尝试重新连接_Javascript_Socket.io_Sails.js - Fatal编程技术网

Javascript SailsSocket继续尝试重新连接

Javascript SailsSocket继续尝试重新连接,javascript,socket.io,sails.js,Javascript,Socket.io,Sails.js,在与socket.io连接身份验证(and)进行斗争之后,多亏了@sgress454,我意识到了如何让它工作,并且我正在发送身份验证/授权令牌,作为连接中查询的一部分(见下文) 当身份验证失败(无效/过期令牌或处于活动用户状态)时,我返回带有false参数的回调,以指示连接被拒绝 但是在客户端,我不确定应该如何处理它,而且似乎套接字在显式断开连接后仍在尝试重新连接-我一直看到它在尝试重新连接 客户端代码如下所示: var _onConnectError = function(err) {

在与socket.io连接身份验证(and)进行斗争之后,多亏了@sgress454,我意识到了如何让它工作,并且我正在发送身份验证/授权令牌,作为连接中查询的一部分(见下文)

当身份验证失败(无效/过期令牌或处于活动用户状态)时,我返回带有false参数的回调,以指示连接被拒绝

但是在客户端,我不确定应该如何处理它,而且似乎套接字在显式断开连接后仍在尝试重新连接-我一直看到它在尝试重新连接

客户端代码如下所示:

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也用于移动应用程序。。。