use a separate goroutine for processing the messages to avoid dropped packets.