【问题标题】:Working with Routes in express js and socket.io and maybe node in general使用 express js 和 socket.io 中的 Routes 以及一般的节点
【发布时间】: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 );
  });
};

【问题讨论】:

  • 我可能很困惑,我读到的方式是“我似乎无法让客户端从路由中的代码启动套接字”,这显然是错误的。你能帮我澄清这个问题,以便我能“更正确地”看到它,而不是我现在看到的方式吗?

标签: node.js express socket.io


【解决方案1】:

我发现创建多个频道的最简单方法是使用不同的 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 足够聪明,可以为此连接使用单个 websocket(至少在使用方法中是这样说的)。

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多