(I'm not sure what else to say here, what you have described is true).
HTTP is a transactional request/response protocol:
- A client opens a connection to the server
- The client sends a request for a specific resource
- The server replies with that request and closes the connection *
* Yes I know you can set the Keep-Alive header and the connection will be kept open while the server waits for another request, but it's still request driven.
MQTT is a Pub/Sub protocol
- A client opens a connection to the broker
- The client sends a subscription request for a topic pattern (this can be an exact topic or a wild card)
- A second client (already connected) publishes a new messages to the broker with a topic that matches the first client.
- The broker checks the topic pattern lists for all connected client and delivers the message to all the matching clients.
The connection is persistent for the lifetime of the client. Because the connection is initiated by the client (it opens the outbound connection) this works when the client is behind a NAT gateway. As long as the Broker is publicly available then this all works fine.
In the situation you have described the "Server" would just be another client connected to the Broker that publishes messages that other clients are subscribed to.