2012-01-11 58 views
4

我想在socket.io中編寫多通道應用程序。您所在的頻道應該由您所在的網址來定義。如果我在app.js中加入永久值,那麼一切正常。只要我改變它,以便route.page的路由進行連接,我會得到錯誤,該連接在上下文中不可用。什麼是正確的方式,以便我可以動態加入頻道?在express和js和socket.io中使用路由,也許在一般節點

/app.js

var io = socketio.listen(app); 
require('./io')(io); 

io.sockets.on('connection', function (socket) { 
    socket.on('debug', function (message) { 
    socket.get('channel', function (err, name) { 
     socket.in(name).broadcast.emit('debug', message); 
    }); 
    }); 
}); 

/io.js

var socketio = function (io) { 
    if (!io) return socketio._io; 
    socketio._io = io; 
} 

module.exports = socketio; 

/routes/index.js

var io = require('../io')(); 
exports.page = function(req, res){ 
    var channel = req.params.id; 
    res.render('page', { title: 'PAGE', channel: channel }); 
    io.sockets.on('connection', function (socket) { 
    socket.join(channel); 
    socket.set('channel', channel); 
    }); 
}; 
+0

我可能感到困惑,我讀到的方式是「我似乎無法讓客戶端從路由中的代碼啓動套接字」,這顯然是錯誤的。你能幫我澄清一下這個問題嗎,所以我可以看到它「更正確」,而不是我現在看到的方式? – jcolebrand 2012-01-11 15:48:58

回答

3

我發現做多通道的最簡單方法沒有使用不同的網址。

例如,我在客戶端執行以下操作:

io.connect('/game/1') 
io.connect('/system') 

,並在服務器上我有

io.of('/game/1').on('connect' function(socket) {...}) 
io.of('/system').on('connect' function(socket) {...}) 

它看起來像我連接這裏兩次,但socket.io是聰明足以使用單個websocket進行此連接(至少它在如何使用中如此說明)。