NemesisFLX
NemesisFLX

Reputation: 23

Does an MQTT subscriber need a static IP?

I want to develop a publisher -> subscriber model with 1 publisher and many subscriber in nodejs.

Currently my idea was to use a normal websocket. The problem with this is that every subscriber needs a static ip and port forwarding if it runs over the internet. This doesnt suit the requirements.

A solution to this seems to be MQTT as it should be suited for that use case, but i saw that it also runs over websockets which should lead to the same problem or does MQTT handle it differently?

Essentially i need a solution where the publisher has a static ip and the subscriber can be anywhere on the world. Is this possible with MQTT or do i need another solution?

Upvotes: 0

Views: 4235

Answers (3)

HD2020
HD2020

Reputation: 23

Explore one way RPC approach. It will not need a public IP address or port forwarding.

Upvotes: 0

hardillb
hardillb

Reputation: 59816

No, only the MQTT broker needs a fixed IP address (and preferably a DNS entry) so the clients know where to find it.

All the MQTT clients (both subscribers and publishers), be they native MQTT or MQTT over websockets connect out to the broker. This means they will work even behind a NAT router running with a dynamic IP address (they would all get disconnected when ever the IP address changed, but nearly all MQTT clients automatically reconnect).

These features make MQTT a good choice for consumer IoT devices as the situation described above is pretty much every home broadband setup.

Upvotes: 5

MBer
MBer

Reputation: 2524

It sounds like your subscribing devices are on local networks, and yes, you would need a static IP for the network and forwarding inside it (not to mention a firewall exception in many systems) for a local device to serve incoming requests. Regardless of protocol, your subscribers do not need to be servers. It is far safer, and ultimately easier, to have them query a central server/system. Only that system needs an IP.

WebSockets do not require port forwarding - they are often used to avoid it. The client opens a connection to a server, then keeps using it to send and receive. It no more requires port forwarding than your computer does when receiving a page from a website. If your publisher is a server or other web-exposed system, you may get the job done by configuring your subscribers to open websockets to it.

However, you may still want MQTT:

  • It sounds like your publisher might be something other than a webserver, and might be less suited to serving than your clients, since you asked this question. With an MQTT client, it could publish to an MQTT broker on a server, which will then pass the messages to the subscribers' clients.
  • Developing robust publish-subscribe functionality is extra work, and existing MQTT software will often serve better than new development.

With some extra configuration, it is even possible to make MQTT subscriptions over WebSockets, but even a regular subscription works fine for avoiding static IP, portforwarding, and inbound firewall rules.

Upvotes: 1

Related Questions