2012-01-11 1 views
4

Я пытаюсь написать многоканальное приложение в socket.io. Канал, в котором вы находитесь, должен определяться URL-адресом, в котором вы находитесь. Если я присоединяю часть в app.js с постоянными значениями, все работает. Как только я изменю его так, чтобы маршрут для route.page делал присоединение, я получаю ошибку, что сокеты недоступны в контексте. Что было бы правильным способом, чтобы я мог динамически присоединяться к каналу?Работа с маршрутами в выражениях 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

ответ

3

Самый простой способ я нашел, чтобы сделать несколько каналов отключен от разных URL-адресов.

Например, у меня есть клиент сделать следующее:

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

и на сервере У меня есть

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

Похоже, я подключении здесь дважды, но socket.io умный достаточно, чтобы использовать один веб-узел для этого соединения (по крайней мере, это говорит о том, как использовать).

Смежные вопросы