Express JSおよびSocket.ioおよび多分ノードのExpressJSおよびSocket.ioのルートを操作する

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

  •  26-10-2019
  •  | 
  •  

質問

socket.ioでマルチチャネルアプリケーションを作成しようとしています。あなたがいるチャネルは、あなたがいるURLによって定義する必要があります。永続的な値を持つ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 );
  });
};
役に立ちましたか?

解決

複数のチャネルを実行することがわかった最も簡単な方法は、異なるURLから外れています。

たとえば、クライアントに以下を実行させます。

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

そして、私が持っているサーバー上

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

ここでは2回接続しているように見えますが、socket.ioはこの接続に単一のWebSocketを使用するのに十分賢いです(少なくともハウツーではそう言います)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top