Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.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 socket.io中的第二个io.connection()不触发连接事件_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript socket.io中的第二个io.connection()不触发连接事件

Javascript socket.io中的第二个io.connection()不触发连接事件,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我需要动态更改客户端连接到的服务器。因此,在我的情况下,客户端如果首先通过以下方式连接到服务器: var $socket = io.connect("//serverA:5656"); 这将成功触发事件代码: $socket.on('connect', function(data) { alert('socket connected with id ' + $socket.id); }); 但是,如果稍后在代码中我需要更改服务器以连接: $socket = io.connect("//

我需要动态更改客户端连接到的服务器。因此,在我的情况下,客户端如果首先通过以下方式连接到服务器:

var $socket = io.connect("//serverA:5656");
这将成功触发事件代码:

$socket.on('connect', function(data) {
   alert('socket connected with id ' + $socket.id);
});
但是,如果稍后在代码中我需要更改服务器以连接:

$socket = io.connect("//serverB:8900");
即使connect事件似乎为$socket.id生成了一个新值,但不会激发该事件,但从服务器向该套接字发出的任何消息都不会通过

我尝试了几个新服务器连接选项,例如:

$socket.disconnect(true);
$socket = io.connect("//serverB:8900");
$socket.io.reconnect();

$socket.disconnect();
$socket.removeAllListeners('connect');
io.sockets = {};
$socket = io.connect("//serverB:8900");

$socket = io.connect("//serverB:8900", {'forceNew': true});

$socket = io.connect("//serverB:8900", {'force new connection': true});

所有这些(以及它们的任何组合)都不起作用。

io.connect
创建一个新的套接字对象。当调用
io.connect(“//serverA:5656”)
时,您将创建第一个套接字对象。然后,在该套接字上设置一个
connect
事件侦听器

调用
io.connect(“//serverB:8900”)
时,您将创建一个全新的套接字。这个新的套接字对象不知道关于您之前创建的第一个套接字的任何信息。重要的是,它没有
connect
事件侦听器

您需要在第二个套接字对象上再次调用
.on('connect',…)
,使其也具有
连接
侦听器。通常,每次调用
io.connection
,您都需要在上调用
,以攻击
连接
侦听器。您可以将此操作放在单个函数中以使其更容易:

function makeSocketWithListener(server) {
    var socket = io.connect(server);
    socket.on("connect", function() {
        alert('socket connected with id ' + socket.id);
    });
    return socket;
}
var$socket=makeSocketWithListener(“//serverA:5656”)


var$socket=makeSocketWithListener(“//serverB:8900”)

看起来您再也没有设置
连接
事件侦听器了,对吗
io.connect
创建了一个新对象,您从未调用过该对象('connection',…)
on,因此它没有
连接
侦听器。我应该在哪里设置它?关于客户?你能指出代码样本吗?非常感谢。这是可行的,但如果服务器更改是在函数内部进行的,则不可行。例如,$$('#login').on('click',函数(){$socket=makeSocketWithListener(//serverC:6900”);}不会触发套接字。on('connect')