繁体   English   中英

不同网络中两个应用程序之间的命令

[英]Commands between two applications in different networks

我想将命令从一个应用程序(例如在移动设备上运行)发送到位于不同网络中的另一个应用程序(例如在嵌入式设备上运行)。

我不想使用VPN或端口转发之类的东西。 因此,在进行了一些研究之后,我发现了一些其他方法来执行此操作,例如通过诸如Azure Service Bus之类的云消息传递服务。

从第一个应用程序向服务总线发送命令/消息对我来说不是问题。 但是我真的不明白两个人如何从云服务连接到第二个设备? 我知道我也可以通过第二个设备将消息从第二个设备发送到云服务。 然后,云服务可以使该连接保持活动状态。 只要连接仍然有效,我就可以向第二台设备发送消息。

但是有些地方我无法理解:

  • 当我有成千上万的设备时,保持成千上万的连接存活不是一个问题吗?
  • 如果有新消息,第二个设备如何监听连接? 嵌入式设备上不需要太多资源吗?

我还阅读了有关使用“长时间轮询”技术和Web套接字的信息。 我了解得很少,无法理解这些概念的优缺点。 我应该使用哪种技术解决问题?

为了与平台无关,我不想使用Azure IoT中心之类的服务。

编辑:

也许我可以使用Web服务并实现MQTT Broker?

我认为提到的MQTT Broker将带您到达那里,尤其是因为您的用例正是MQTT及其实现(经纪人和客户端)的目的。

简化的故事如下:

在您的应用程序上运行的MQTT客户端使用“主题”(认为路由密钥)将MQTT消息“发布”到MQTT代理。 在您的设备上运行的MQTT客户端在代理上订阅了相同的“主题”。 这使代理可以将消息从应用程序路由到设备,而无需他们彼此了解。

据我了解您的问题,您关注的问题如下:

  1. 可以同时连接所有设备(数千个打开的TCP连接),因此可以通过代理“实时”接收从第一个应用程序发布的消息。
  2. 假设设备由于任何原因(例如由于网络问题或能耗降低)而断开连接,如何确保设备最终将接收到消息。
  3. 设备将如何连接到代理。

关于1. MQTT代理被构建为处理(并保持)大量的TCP连接。 例如,作为我的核心开发人员之一,我可以谈谈VerneMQ (一个MQTT代理),它能够在一个节点上处理超过一百万个连接(使用正确的服务器配置,这实际上主要是可用RAM的问题)。 但是,我们仅在设备主要处于睡眠状态时才建议这样的设置。 使用VerneMQ,您还可以向群集添加更多节点,并平衡所有群集节点之间的连接。

关于2. MQTT代理通常为尚未发送到客户端或未被客户端确认的消息实现脱机存储。 这样一来,您的设备可以离线使用数小时,并在重新连接后收到消息。

关于3.这是特定于您的用例的。 在最简单的情况下,您需要在每台设备上配置一个固定的IP:Port,设备上运行的MQTT客户端使用它来连接到代理。 根据重新配置设备的能力,可以使用DNS查找甚至为重新配置提供“反向通道”。

对于符合标准的MQTT客户端软件,请查看Eclipse Paho 有关可用的MQTT代理的最新列表,请查阅MQTT代理列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM