我想开发一个发布者->订阅者模型,其中有1个发布者并且在nodejs中有许多订阅者。
目前,我的想法是使用普通的网络套接字。问题在于,每个订阅者都需要一个静态ip 和端口转发(如果它通过Internet运行)。这不符合要求。
对此的一个解决方案似乎是MQTT,因为它应该适合该用例,但是我看到它也运行在websocket上,这应该导致相同的问题,或者MQTT的处理方式不同?
基本上,我需要一种解决方案,其中发布者具有静态ip,而订阅者可以位于世界上的任何地方。 MQTT是否可以解决此问题,还是需要其他解决方案?
答案 0 :(得分:0)
听起来您的订购设备在本地网络上,是的,您需要网络的静态IP并在其内部转发(更不用说许多系统中的防火墙例外),本地设备才能满足传入的请求。不管使用哪种协议,您的订户都不必是服务器。让他们查询中央服务器/系统要安全得多,并且最终会更容易。只有该系统需要IP。
WebSocket不需要要求端口转发-它们通常用于避免这种情况。客户端打开与服务器的连接,然后继续使用它进行发送和接收。从网站接收页面时,与您的计算机相比,它不再需要端口转发。如果您的发布者是服务器或其他Web公开的系统,则可以通过配置您的订阅者打开Websocket来完成工作。
但是,您可能仍需要MQTT:
通过一些额外的配置,甚至可以通过WebSockets 进行MQTT订阅,但是即使常规订阅也可以很好地避免静态IP,端口转发和入站防火墙规则 >。
答案 1 :(得分:0)
否,只有MQTT代理需要固定的IP地址(最好是DNS条目),以便客户端知道在哪里可以找到它。
所有MQTT客户端(订阅者和发布者),无论是本机MQTT还是通过Websocket的MQTT都连接到代理。这意味着它们甚至可以在使用动态IP地址运行的NAT路由器后面工作(一旦更改IP地址,它们都会断开连接,但是几乎所有MQTT客户端都会自动重新连接)。
这些功能使MQTT成为消费物联网设备的理想选择,因为上述情况几乎在每个家庭宽带设置中都是如此。
答案 2 :(得分:0)
探索一种方法RPC方法。它不需要公共IP地址或端口转发。