socket.io笔记三之子命名空间的socket连接

当客户端发送admin命名空间下的连接,如果主连接也监听了connetion事件,主连接的connection事件会先触发执行,然后紧接着触发执行admin命名空间下的connection事件。如果客户端连接的是主连接,admin空间下的connection事件不会触发执行。

//服务端代码
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server,{handshake:{xdomain:true}});
var adminNameSpace =io.of('/admin');

adminNameSpace.on('connection', function(socket){ 
console.log('admin')
}

io.on('connection', function(socket){ 
console.log('io')
//io.close() 如果调用了close关闭方法,主连接关闭,子空间下的connection事件不会执行 }
//客户端代码 var ws = io('http://localhost:3002/admin'); //服务端先输出"io",然后输出"admin" 如果连接的是ws = io('http://localhost:3002'); //服务端只输出"io",adminNameSpace 空间下的connection事件不会执行 NOTE:在连接adminNameSpace命名空间时,如果主连接回调中把主连接关闭了,比如调用了io.close(),那么adminNameSpace的connection事件不会被执行
//当通过io.close把主连接关闭后,无论在哪里尝试重新建立主连接都会失败

//子命名空间下的socket connection连接事件回调中不能调用子连接的close方法,但可以在主连接的自定义事件中的回调中调用,不能在主连接的connection事件中调用,因为这时候子命名还没有建立连接。