我正在构建一些用于SocketIO测试的小工具。用户需要做的第一件事就是提供一个要连接的地址。
用户提交地址后,就会触发此功能:
connect = (address) => {
socket = io(address);
socket.on('connect', () => {
console.log('connected!')
});
socket.on('connect_error', (error) => {
console.log('Error connecting!')
});
}
请注意,“套接字”是一个全局变量。
如果用户提供的地址无效,则问题开始。 如果使用正确的地址建立了成功的连接(如果用户更正并提交了地址),则SocketIO将保持重新连接,并且不会停止。
即使变量“ socket”获得了分配给它的新实例,旧变量仍然以某种方式保留在后台,并尝试重新连接。
我该如何手动阻止重新连接,或者完全“破坏”旧实例?
答案 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;
这应该绝对正常。