【发布时间】:2012-02-07 09:49:43
【问题描述】:
我正在尝试在 socket.io 中编写一个多通道应用程序。您所在的频道应由您所在的网址定义。如果我使用永久值在 app.js 中加入部分,那么一切正常。一旦我更改它以便 route.page 的路由进行连接,我就会收到错误消息,即套接字在上下文中不可用。什么是让我可以动态加入频道的正确方法?
/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 );
});
};
【问题讨论】:
-
我可能很困惑,我读到的方式是“我似乎无法让客户端从路由中的代码启动套接字”,这显然是错误的。你能帮我澄清这个问题,以便我能“更正确地”看到它,而不是我现在看到的方式吗?