2016-03-08 103 views
0

我需要按字母顺序更改客户端连接的服务器。所以,在我的情况下,客户如果首先连接到同一个服务器:socket.io中的第二个io.connection()不会触发连接事件

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}); 

无(和它们的任意组合)制定。

+1

看起来你再也没有设置过e'connection'事件监听器,对吗? 'io.connect'创建一个新的对象,你永远不会调用'.on('connection',...)',所以它没有'connection'监听器。 – apsillers

+0

我应该在哪里设置?在客户端?你能指出代码示例吗?谢谢! – Luciano

回答

0

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

当您致电io.connect("//serverB:8900")时,您将创建一个全新的插座。这个新的套接字对象并不知道您之前创建的第一个套接字。重要的是,它没有connect事件侦听器。

您需要再次在第二个套接字对象上调用.on('connect', ...),以使其具有connection侦听器。通常,每次拨打io.connection时,您需要随后致电on攻击connection听众。你可以把这个操作在一个单一的功能,使其更容易:

function makeSocketWithListener(server) { 
    var socket = io.connect(server); 
    socket.on("connect", function() { 
     alert('socket connected with id ' + socket.id); 
    }); 
    return socket; 
} 

变量$插座= makeSocketWithListener( “// serverA的:5656”);

...

变量$插座= makeSocketWithListener( “// serverB上:8900”);

+0

这是工作,但它不工作,如果服务器更改内功能。例如在$$('#login')。on('click',function(){$ socket = makeSocketWithListener(“// serverC:6900”);}不会触发socket.on('connect') – Luciano