一旦使用其他地址建立了成功的连接,阻止SocketIO重新连接

时间:2019-02-18 18:02:11

标签: javascript socket.io

我正在构建一些用于SocketIO测试的小工具。用户需要做的第一件事就是提供一个要连接的地址。

用户提交地址后,就会触发此功能:

connect = (address) => {

    socket = io(address);

    socket.on('connect', () => {
      console.log('connected!')
    });

    socket.on('connect_error', (error) => {
      console.log('Error connecting!')
    });
  }

请注意,“套接字”是一个全局变量。

如果用户提供的地址无效,则问题开始。 如果使用正确的地址建立了成功的连接(如果用户更正并提交了地址),则SocketIO将保持重新连接,并且不会停止。

即使变量“ socket”获得了分配给它的新实例,旧变量仍然以某种方式保留在后台,并尝试重新连接。

我该如何手动阻止重新连接,或者完全“破坏”旧实例?

1 个答案:

答案 0 :(得分:1)

好吧,您可以在重新分配旧实例之前.disconnect()

connect = (address) => {
    if (socket) {
        socket.disconnect(); // <==== !!!
    }

    socket = io(address);

    socket.on('connect', () => {
      console.log('connected!')
    });

    socket.on('connect_error', (error) => {
      console.log('Error connecting!')
    });
  }

只需确保在调用此函数之前已初始化变量socket,例如:

const socket = null;

这应该绝对正常。