Utilisation des itinéraires en js express et socket.io et le noeud peut-être en général

StackOverflow https://stackoverflow.com/questions/8812505

  •  26-10-2019
  •  | 
  •  

Question

Je suis en train d'écrire une application multi-canal à socket.io. Le canal que vous êtes doit être défini par l'URL que vous êtes. Si je fais la partie de jonction dans les app.js avec des valeurs permanentes tout fonctionne. Dès que je change pour que la route pour route.page ne le rejoindrai je reçois l'erreur, que les prises ne sont pas disponibles dans le contexte. Quelle serait la bonne façon pour que je puisse rejoindre dynamiquement le canal?

/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 );
  });
};
Était-ce utile?

La solution

La meilleure façon que je l'ai trouvé à faire des canaux multiples est hors de différentes URL.

Par exemple, j'ai le client procédez comme suit:

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

et sur le serveur je

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

On dirait que je me connecte deux fois ici, mais socket.io est assez intelligent pour utiliser un seul websocket pour cette connexion (au moins il le dit dans la façon à utiliser).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top