我正在尝试在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 ); }); };我发现做多个频道的最简单方法是使用不同的网址.
例如,我让客户端执行以下操作:
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进行此连接(至少它在使用方法中如此说明).