2012-09-07 243 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>