parera riddle
parera riddle

Reputation: 148

Mosca sends multiple messages continously

I have setup a node js server with Mosca running on it. Clients are able to connect to the Mosca server and publish a message. I need to the send an acknowledgment in the form of a message(subscribed to some topic) back to the client.

The below code sends multiple messages continuously once the message is published by the client. Am I missing anything?

 var settings = {
    port: 1882,
    backend: ascoltatore
 };

 var message = {
   topic: 'crofters',
   payload: 'OK', // or a Buffer
   qos: 2

 };

 var server = new mosca.Server(settings);

 server.on('clientConnected', function(client) {
       console.log('client connected', client.id);


   });

   // fired when a message is received
server.on('published', function(packet, client ) {


    var packet_payload = packet.payload;
    packet_payload = packet_payload.toString();
    console.log('Published', packet_payload);

    server.publish(message, function() {
        console.log('done!');
    });


});

server.on('ready', setup);

function setup() {
   console.log('Mosca server is up and running');
}

Upvotes: 0

Views: 624

Answers (2)

Hicaro
Hicaro

Reputation: 687

The event listener server.on('published', function(packet, client){...} listens to every publishing events, including the server's.

What is happening is that when you use server.publish(message, function(){...}) inside that listener it triggers another published event, which is immediately caught by the listener.

It never stops publishing because it never stops catching its own events.

Upvotes: 2

Sdu Gumede
Sdu Gumede

Reputation: 123

I have been facing similar issues. If you notice, Mosca has only QoS 0 and Qos 1

So I suppose the broker tries to send the same message more than once "at least once" until it receives some acknowledgement from a client. Check this document out

Upvotes: 0

Related Questions