当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 使用快速js和socket.io中的路由以及一般的节点

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在尝试在socket.io中编写一个多通道应用程序.您所在的频道应该由您所在的网址定义.如果我使用永久值在app.js中加入部分,一切正常.一旦我更改它以便route.page的路由进行加入我得到
我正在尝试在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进行此连接(至少它在使用方法中如此说明).

网友评论