簡體   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