Express JSおよびSocket.ioおよび多分ノードのExpressJSおよびSocket.ioのルートを操作する
質問
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を使用するのに十分賢いです(少なくともハウツーではそう言います)。
所属していません StackOverflow