2012-09-07 193 views
1

刚刚搜索了所有网络,以了解如何在订阅或取消订阅频道时跟踪node.js服务器内部。我能做的事情是知道的是连接和断开绑定,但不知道如何与频道做到这一点。如何知道频道何时订阅/取消订阅socket.io

io.sockets.on('connection', function (socket) { 
    console.log("["+socket.id+"] Connected"); 

    // handler to know when a socket subscribed a channel (*) ? 
    // handler to know when a socket unsubscribed a channel (*) ? 

    socket.on('disconnect', function() { 
     console.log("["+socket.id+"] Disconnect"); 
    }); 
}); 

这可能吗?

+0

当你说“通道,“你是指S​​ocket.IO [房间](https://github.com/learnboost/socket.io#rooms)? –

+0

制作自定义事件并在您订阅频道/房间时发出该自定义事件,并发出其他自定义事件“取消订阅”来处理取消订阅。 – InspiredJW

+0

不,只有在客户端的socket.on(“channelName”,..),你也可以做socket.removeAllListeners(“channelName”),但我想在服务器端通知这两个动作。 – mateusmaso

回答

1

您正在寻找 “socket.of( 'CHANNELNAME')” ...... 见Socket.io docs

SERVER:

var io = require('socket.io').listen(80); 

var chat = io 
    .of('/chat') 
    .on('connection', function (socket) { 
    socket.emit('a message', { 
     that: 'only' 
     , '/chat': 'will get' 
    }); 
    chat.emit('a message', { 
     everyone: 'in' 
     , '/chat': 'will get' 
    }); 
    }); 

var news = io 
    .of('/news') 
    .on('connection', function (socket) { 
    socket.emit('item', { news: 'item' }); 
    }); 

客户:

<script> 
    var chat = io.connect('http://localhost/chat') 
    , news = io.connect('http://localhost/news'); 

    chat.on('connect', function() { 
    chat.emit('hi!'); 
    }); 

    news.on('news', function() { 
    news.emit('woot'); 
    }); 
</script>