这是我在本网站上的第一个问题。由于这个网站,我在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');
一切都是正确的,问题是当我覆盖变量pot_bot时,我希望在新服务器发出它时调用.on('action')。上面的代码示例不是这种情况。
有人有解决方案吗?
答案 0 :(得分:0)
我建议在覆盖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' );