title: MQTT subscription much slower than publishing
body: <p>I am using MQTT to transfer sonar sensor data from an EV3DEV device to a PC. In order to do that I've set-up the MQTT Mosquitto broker on ubuntu running under Microsoft's Windows Linux Subsystem (WLS) as shown in image bellow.</p>
  
  <p><img src="https://i.stack.imgur.com/cRcaB.jpg" alt="Schematic of current arquitecture"></p>
  
  <p>On the EV3DEV end, I am using umqtt.simple module and on the PC side I am using Paho MQTT module.</p>
  
  <p>The messages from the EV3DEV to the broker seem to be flowing fast as I expected (at a similar rate as I could experiment when I used socks in an earlier version) The problem appears on the subscriber side, where I can see the messages are being received at a MUCH SLOWER rate, causing the messages to queue in the browser. When I stop the EV3DEV even after just a few seconds, I keep getting messages on the PC for quite some time.</p>
  
  <p>Is this performance difference reasonable? I was expecting MQTT to add some additional latency to the data transmission as compared to a plain sock communication, but I was certainly not expecting such a big difference in through output between the MQTT message sending and the message subscription.</p>
  
  <p>ADDITIONAL NOTES
  - I installed mosquito under WLS because it seemed easier and the windows version did not seem to work just by installing it.
  - I am not sure of the rate at which I am sending the messages. Probably as fast as the broker takes them since it is in a loop dedicated to get the sensor data and send it to the broker. The issue, in any case, is that the rate at which the broker is accepting messages from the publisher is much higher than the rate at which it is sending the messages to the subscriber.
  - Here is a sample of the code I use on the on_message callback function:</p>
  
  <pre><code>def ProcessMessage(self, client, userdata, msg):
      logging.info("Message received from broker:" +msg.payload.decode())
      Switch = {'robot/sonar': self.PutInSonarQueue, "robot/odo": 
      self.PutInOdometryQueue}
      payloadasobject = ast.literal_eval(msg.payload.decode())
      Switch[msg.topic](payloadasobject)
  </code></pre>
  
  <p>The switch statement calls functions that simply put the message in a queue.</p>