Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不同网络中两个应用程序之间的命令_C#_Sockets_Azure_Mqtt_Azureservicebus - Fatal编程技术网

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

C# 不同网络中两个应用程序之间的命令,c#,sockets,azure,mqtt,azureservicebus,C#,Sockets,Azure,Mqtt,Azureservicebus,我想将命令从一个应用程序(例如,在移动设备上运行)发送到位于不同网络中的另一个应用程序(例如,在嵌入式设备上运行) 我不想使用VPN或类似端口转发的东西。因此,经过一些研究,我找到了一些其他方法来实现这一点,例如通过Azure service Bus之类的云消息服务 从第一个应用程序向服务总线发送命令/消息对我来说不是问题。但我真的不明白两个人是如何从云服务连接到第二台设备的?我知道我也可以从第二台设备向云服务发送消息,例如通过HTTPS。然后,云服务可以保持这种连接。只要连接处于活动状态,我就

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

我不想使用VPN或类似端口转发的东西。因此,经过一些研究,我找到了一些其他方法来实现这一点,例如通过Azure service Bus之类的云消息服务

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

但有几点我不明白:

  • 当我拥有数千台设备时,让数千个连接保持活力不是一个问题吗
  • 如果有新消息,第二个设备如何监听连接?在嵌入式设备上不需要太多资源吗
我还了解了使用“长轮询”技术和web套接字。我知道的太少,无法理解这些概念的优缺点。我应该使用哪种技巧解决我的问题

为了更加不依赖平台,我不想使用Azure IoT Hub之类的服务

编辑:


也许我可以使用web服务并实现MQTT代理

我认为前面提到的MQTT代理将帮助您实现这一点,特别是您的用例正是MQTT及其实现(代理和客户机)构建的目的

简化的故事如下:

应用程序上运行的MQTT客户端使用“主题”(思考路由密钥)将MQTT消息“发布”到MQTT代理。在您的设备上运行的MQTT客户端在代理上具有相同“主题”的订阅。这使代理能够将消息从应用程序路由到设备,而不需要它们相互了解

据我了解,你的问题如下:

  • 是否可以同时连接所有设备(数千个打开的TCP连接),从而在“实时”中通过代理接收第一个应用程序发布的消息
  • 假设设备将因任何原因断开连接,例如由于网络问题或能源消耗减少,如何确保设备最终接收到消息
  • 设备将如何连接到代理
  • 关于1。MQTT代理是为处理(并保持)大量TCP连接而构建的。例如,我可以谈论的MQTT代理,因为我是核心开发人员之一,能够在一个节点上处理超过一百万个连接(通过适当的服务器配置,实际上主要是可用RAM的问题)。但是,我们只建议在设备主要处于睡眠状态时使用这种设置。使用VerneMQ,您还可以向集群添加更多节点,并平衡所有集群节点之间的连接

    关于2。MQTT代理通常为尚未发送到客户端或客户端尚未确认的消息实现脱机存储。这允许您的设备脱机数小时,并在重新连接时接收消息

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


    对于符合标准的MQTT客户机软件,请查看。有关可用MQTT代理的最新列表,请咨询。

    您是否考虑过web服务。。?意思是创建一个以设备类型为参数的单一服务..或类似性质的东西..?@MethodMan我可以创建一个单一服务,但如何通过该服务获得与设备的连接?创建web服务时,您熟悉连接字符串等吗。。?我相信网上有很多关于你想做什么的例子。。此外,如果没有看到任何现有的代码,我也无法以这种或那种方式指导您。。sorry@MethodMan我可以使用连接字符串等来获得从设备到云服务或服务总线的连接。但我的问题是,使用消息服务从云/服务器到设备建立连接有何利弊。如果您的数据位于云上,假设每个设备都有一个不同的连接。那么您可以向配置文件dbconn和dbconn2添加两个连接字符串,例如,点击一个位置但指向另一个位置例如,对于2个不同的数据库,我不确定这有什么让人如此困惑。如果设备向代理发送第一条MQTT消息,那么设备和代理之间就有一个开放的连接。但是代理如何保持连接的开放性呢?如果双方都没有主动关闭连接,那么连接仍然是开放的。