[英]second io.connection() in socket.io does not fire connect event
我需要動態更改客戶端連接到的服務器。 因此,在我的情況下,客戶端首先使用以下命令連接到服務器:
var $socket = io.connect("//serverA:5656");
這成功觸發了事件代碼:
$socket.on('connect', function(data) {
alert('socket connected with id ' + $socket.id);
});
但是,如果稍后在代碼上,我需要更改與之連接的服務器:
$socket = io.connect("//serverB:8900");
即使它似乎為$ socket.id生成了一個新值,也不會觸發connect事件,但是從服務器到此套接字的任何發射都不會通過。
我嘗試了幾種新服務器連接選項,例如:
$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', ...)
,以使其也具有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;
}
var $ socket = makeSocketWithListener(“ // serverA:5656”);
...
var $ socket = makeSocketWithListener(“ // serverB:8900”);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.