Arbeiten mit Routen in Express JS und Socket.io und vielleicht den Knoten im Allgemeinen

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

  •  26-10-2019
  •  | 
  •  

Frage

Ich versuche, eine Multi -Kanal -Anwendung in Socket.io zu schreiben. Der Kanal, in dem Sie sich befinden, sollte durch die URL definiert werden, auf der Sie sich befinden. Wenn ich den Verbindungsteil in der App.js mit dauerhaften Werten mache, funktioniert alles. Sobald ich sie so ändere, dass die Route für die Route. Was wäre der richtige Weg, damit ich dynamisch dem Kanal beitreten kann?

/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 );
  });
};
War es hilfreich?

Lösung

Der einfachste Weg, den ich für mehrere Kanäle festgestellt habe, sind verschiedene URLs.

Zum Beispiel habe ich den Kunden Folgendes aus:

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

und auf dem Server habe ich

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

Es sieht so aus, als würde ich hier zweimal eine Verbindung herstellen, aber Socket.io ist klug genug, um ein einzelnes Websocket für diese Verbindung zu verwenden (zumindest heißt es in der Anleitung des Gebrauchs).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top