簡體   English   中英

在Socket.io上從客戶端更改服務器

[英]Changing server from client-side on Socket.io

這是我在本網站上的第一個問題。 感謝這個網站,我在Google上的許多問題都得到了解答,但是我找不到問題的答案,或者我只是想不出正確的方式來發布問題。

我有三個Socket.IO服務器,應通過單擊不同的按鈕進行更改。 我的想法是這樣的: var pot_bot = io('12.12.12.12:3222'); pot_bot.on('action', function(data) { console.log('unique data '+data.hi);}); if(button1.clicked) pot_bot = io('12.12.12.12:3223'); var pot_bot = io('12.12.12.12:3222'); pot_bot.on('action', function(data) { console.log('unique data '+data.hi);}); if(button1.clicked) pot_bot = io('12.12.12.12:3223');

一切都正確,問題是當我覆蓋變量pot_bot時,我希望在新服務器發出它時調用.on('action')。 上面的代碼示例並非如此。

有人對此有解決方案嗎?

我建議在覆蓋pot_bot之前從舊的管理器中刪除事件偵聽器,然后將新的偵聽器綁定到新的偵聽器。 (io會緩存管理器,因此,如果您每次切換回去,您都將恢復原來的管理器,並且如果繼續添加偵聽器而從未刪除它們,則您將在同一管理器上獲得重復的偵聽器)。 您可以將它們全部放在函數中,這樣就不必重復代碼:

function switch_to_server( new_uri ) {
    pot_bot && pot_bot.removeListener( 'action' );

    pot_bot = io( new_uri);
    pot_bot.on('action', function(data) { console.log('unique data '+data.hi);});
}

if ( button1.clicked )
    switch_to_server( '12.12.12.12:3223' );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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