Expressを使用したルーティングの概念が適切に理解されていないためか、これら3つすべてをまとめるのに苦労しています。
イベントが更新されたRabbitMQキューがあります。これらのイベントはIDで認識できます。そのため、イベントに関する特定のページにアクセスしたいと思います。そのIDに対応する更新だけです。
キュー:1316、1539、3486、3479、1316、3890、3479、...->DBから無期限にフィードします。www.example.com/event/1316->ID1316のメッセージだけをキューから取得しますwww.example.com/event/3479->ID3479のメッセージだけをキューから取得します
私のコードは最初のイベントをロードするとうまく機能しますが、別のウィンドウで2番目のイベントをロードすると、両方のイベントからメッセージを取得します。3番目のイベントをロードすると、3つのIDからメッセージを取得します。
app.js
var express = require('express')
, http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server, { log: false });
require('./io')(io);
var amqp = require('amqp');
var rabbitMQ = amqp.createConnection({ host: 'localhost' });
rabbitMQ.on('ready', function() {
console.log('Connected to RabbitMQ');
io.sockets.on('connection', function (socket) {
console.log('Socket connected: ' + socket.id);
rabbitMQ.queue('offer', { autoDelete: false, durable: false, exclusive: false }, function(q) {
q.bind('#'); // Catch all messages
q.subscribe(function (message) {
obj = JSON.parse(message.data.toString());
//socket.broadcast.to(obj.id).emit('message', obj);
io.sockets.in(obj.id).emit('message', obj);
});
});
});
});
var routes = require('./routes')
, event = require('./routes/event');
app.get('/', routes.index);
app.get('/event/:id', event.index);
server.listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
io.js
var socketio = function (io) {
if (!io) return socketio._io;
socketio._io = io;
}
module.exports = socketio;
ルート/event.js
var io = require('../io')();
exports.index = function(req, res) {
io.sockets.on('connection', function (socket) {
socket.join(req.params.id);
});
res.render('event', { title: 'Event' });
};
ありがとう!