MQTT订户是否需要静态IP?

时间:2019-03-15 12:09:58

标签: node.js websocket mqtt one-to-many publish-subscribe

我想开发一个发布者->订阅者模型,其中有1个发布者并且在nodejs中有许多订阅者。

目前,我的想法是使用普通的网络套接字。问题在于,每个订阅者都需要一个静态ip 和端口转发(如果它通过Internet运行)。这不符合要求。

对此的一个解决方案似乎是MQTT,因为它应该适合该用例,但是我看到它也运行在websocket上,这应该导致相同的问题,或者MQTT的处理方式不同?

基本上,我需要一种解决方案,其中发布者具有静态ip,而订阅者可以位于世界上的任何地方。 MQTT是否可以解决此问题,还是需要其他解决方案?

3 个答案:

答案 0 :(得分:0)

听起来您的订购设备在本地网络上,是的,您需要网络的静态IP并在其内部转发(更不用说许多系统中的防火墙例外),本地设备才能满足传入的请求。不管使用哪种协议,您的订户都不必是服务器。让他们查询中央服务器/系统要安全得多,并且最终会更容易。只有该系统需要IP。

WebSocket不需要要求端口转发-它们通常用于避免这种情况。客户端打开与服务器的连接,然后继续使用它进行发送和接收。从网站接收页面时,与您的计算机相比,它不再需要端口转发。如果您的发布者是服务器或其他Web公开的系统,则可以通过配置您的订阅者打开Websocket来完成工作。

但是,您可能仍需要MQTT:

  • 听起来您的发布者可能不是Web服务器,并且可能不如您的客户更适合提供服务,因为您问了这个问题。使用MQTT客户端,它可以发布到服务器上的MQTT代理,然后将消息传递到订阅者的客户端。
  • 开发健壮的发布-订阅功能是额外的工作,并且现有的MQTT软件通常会比新开发的服务更好。

通过一些额外的配置,甚至可以通过WebSockets 进行MQTT订阅,但是即使常规订阅也可以很好地避免静态IP,端口转发和入站防火墙规则 >。

答案 1 :(得分:0)

否,只有MQTT代理需要固定的IP地址(最好是DNS条目),以便客户端知道在哪里可以找到它。

所有MQTT客户端(订阅者和发布者),无论是本机MQTT还是通过Websocket的MQTT都连接到代理。这意味着它们甚至可以在使用动态IP地址运行的NAT路由器后面工作(一旦更改IP地址,它们都会断开连接,但是几乎所有MQTT客户端都会自动重新连接)。

这些功能使MQTT成为消费物联网设备的理想选择,因为上述情况几乎在每个家庭宽带设置中都是如此。

答案 2 :(得分:0)

探索一种方法RPC方法。它不需要公共IP地址或端口转发。