簡體   English   中英

socket.io中的第二個io.connection()不會觸發連接事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM