Socket.io:手动连接和断开命名空间

时间:2013-04-30 18:08:34

标签: javascript node.js socket.io

我创建了一些按钮来连接和断开我的命名空间:

<div id="message">no message</div>
<button id="disNamespace1" type="button"> Disconnect from namespace1</button>
<button id="disNamespace2" type="button"> Disconnect from namespace2</button>
<button id="conNamespace1" type="button"> connection to namespace1</button>
<button id="conNamespace2" type="button"> connection to namespace2</button>

我正在处理这样的按钮:

$('#conNamespace1').click(function(ev){
    mySocket = io.connect('http://localhost:1337/namespace1');
    mySocket.on("msg:from:namspace1", function(msg){
        $('#message').text(msg);
    });
});
$('#conNamespace2').click(function(ev){
    mySocket = io.connect('http://localhost:1337/namespace2');
    mySocket.on("msg:from:namspace2", function(msg){
        $('#message').text(msg);
    });
});

$('#disNamespace1').click(function(ev){
    console.log('trying disconnect');
    io.sockets['http://localhost:1337'].disconnect();
});
$('#disNamespace2').click(function(ev){
    io.sockets['http://localhost:1337'].disconnect();
});

我的服务器:

socketNamespace1 = io.of('/namespace1');
socketNamespace2 = io.of('/namespace2');

socketNamespace1.on('connection', function(mySocket){
    console.log('namespace1: new user ');
    mySocket.emit('msg:from:namspace1', 'msg:from:namspace1');
    mySocket.on('disconnect', function(){
        console.log('disconnecting from namespace1');
    }); 
});
socketNamespace2.on('connection', function(mySocket){
    console.log('namespace2: new user ');
    mySocket.emit('msg:from:namspace2', 'msg:from:namspace2');
    mySocket.on('disconnect', function(){
        console.log('disconnecting from namespace2');
    });
});

我的第一次连接和断开工作很好,但是当第二次点击连接按钮时,它确实可以运行任何时间。有什么问题?

1 个答案:

答案 0 :(得分:0)

试试这个:

mySocket = io.connect('http://localhost:1337/namespace1', {'force new connection': true});

来自socket.io docs:

  

调用时,会为给定的网址创建新的经理,然后尝试   重新使用现有的Manager进行后续调用,除非   多路复用选项与false一起传递。通过此选项是相当于传递强制新连接&#39;:真实

所以也许socket.io会对你的第二个&#34; socket.connect()&#34;随后的电话......