vendredi 6 mars 2015

Node-amqp and socket.io strange behaviour

I m actually trying to implement the pub/sub pattern using node-amqp (http://ift.tt/1hf1DBV).


I have some problems to implement it.


What I need :



  • Publish message from a user

  • Broadcast it to others user

  • Sending the message to offline users that will consume it the next time they'll be connected


What I've actually :



(function () {

var amqp = require('amqp');

var connection = amqp.createConnection({ host: 'http://127.0.0.1:5672/' });
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});

server.listen(8888);

// Wait for connection to become established.


connection.on('ready', function () {

var sendMessage = function (queue, msg) {
connection.publish(queue, JSON.stringify(msg));
}


io.sockets.on('connection', function (socket) {

socket.on('message', function (msg) {
sendMessage('my-queue', msg);
});

connection.queue('my-queue', {autoDelete: false}, function (q) {
q.bind('#');

q.subscribe(function (message) {
socket.broadcast.emit('news',message);
});
});

});
});
})()



  • On the index.html page, I connect to the socket server

  • I have a button that send a message

  • I open two different browser on the index page, and my users are both connected

  • If I send a message to the server, it send it to the other users

  • If I send a second message to the server, it send the message to the user that sent the message.


It's switching, every pair message (because I have two users), the other users get the message, if it's an impair message, the current user sending the message receive the message. What is this behaviour ?


Can you help me correcting my code to implement my needs a good way ?


NB : I use RabbitMQ with standard config on a windows 7 x64 computer


Aucun commentaire:

Enregistrer un commentaire