我想将命令从一个应用程序(例如,在移动设备上运行)发送到位于不同网络中的另一个应用程序(例如,在嵌入式设备上运行)。
我不想使用VPN或端口转发之类的东西。因此,经过一些研究后,我发现了其他一些方法,例如通过Azure Service Bus等云消息服务。
从第一个应用程序向服务总线发送命令/消息对我来说不是问题。但我真的不明白两个如何从云服务连接到第二个设备?我知道我也可以从第二个设备向云服务发送消息,例如通过HTTPS。然后云服务可以保持该连接的活跃。只要连接处于活动状态,我就可以向第二个设备发送消息。
但有一点我无法理解:
我还读到了使用“长轮询”技术和网络套接字。我知道太少了解这些概念的优点和缺点。我应该使用哪种技术解决问题?
为了更加平台无关,我不想使用Azure IoT Hub等服务。
修改
也许我可以使用Web服务并实现MQTT Broker?
答案 0 :(得分:2)
我认为上面提到的MQTT代理将帮助您,特别是因为您的用例正是MQTT及其实现(代理和客户端)的构建。
简化的故事如下:
在您的应用程序上运行的MQTT客户端发布'使用'主题的MQTT消息' (想想路由密钥)到MQTT代理。在您的设备上运行的MQTT客户端可以订阅相同的主题'在经纪人身上。这使代理能够将消息从应用程序路由到设备,而无需他们了解彼此。
据我了解您的问题,您的疑虑如下:
关于1.构建MQTT代理以处理(并保持)大量TCP连接。例如VerneMQ,我可以谈论的MQTT代理,因为我是核心开发人员之一,能够在一个节点上处理超过一百万个连接(通过适当的服务器配置,它实际上主要是一个问题)可用的RAM)。但是,如果设备主要处于休眠状态,我们只推荐这样的设置。使用VerneMQ,您还可以向群集添加更多节点,并平衡所有群集节点之间的连接。
关于2. MQTT代理通常为尚未发送给客户端或未被客户端确认的消息实现离线存储。这允许您的设备离线数小时并在重新连接时接收消息。
关于3.这是特定于您的用例。在最简单的情况下,您在每个设备上配置固定IP:端口,并且在设备上运行的MQTT客户端使用它来连接到代理。根据重新配置设备的能力,使用DNS查找是有意义的,甚至可以提供反向信道'用于重新配置。
对于符合标准的MQTT客户端软件,请查看Eclipse Paho。有关可用MQTT代理的最新列表,请参阅the list of MQTT brokers。