您如何使用Node.js将“消息”推送到设备?

时间:2020-04-01 00:17:28

标签: node.js

现在这是一个非常奇怪的问题,我无法在互联网上找到答案。这是我计划构建项目的方式: Controller App --> Node.js Server (probably Express) --> Some IoT Device Running Node.js Who Knows Where

因此,从本质上讲,Controller App希望控制IoT设备,但它可以在任何地方。因此,它与位于静态IP上的服务器进行通信,该服务器将跟踪此IoT设备的位置(可以在任何网络/ IP /端口上)。因此,控制器应用程序将向服务器发送一个请求,并且服务器将告知该IoT设备将在哪里做某事。

问题是,此Node.js服务器将如何知道设备在哪里?

建议的解决方案A:我想到的一种方法是拥有一台服务器,并在服务器和IoT设备之间共享一个秘密字符串。服务器将具有IoT设备可以“订阅”的一些“端点(?)”。

建议的解决方案B:IoT设备形成一个WebSocket或Sockets.io连接。尽管这可能是一个更好,更轻松的解决方案,但是当您添加许多设备时,服务器在与多个设备实时通信时是否会占用更多资源?

是的,这是一个非常奇怪的问题,因为在这里,它实际上是来自Node.js-> Node.js的推送通知,而不是其他所有搜索结果的有关Node.js-> iOS等通知服务或Google或网络服务工作者。

谢谢!

1 个答案:

答案 0 :(得分:1)

“推送”选项通常如下:

  1. 客户端偶尔轮询一次端点,以检查是否有新内容。并不是真正的推动,但是实现起来非常简单。使用此实现的可行性取决于您需要推动的“实时”程度。

  2. 客户端与服务器创建并维护一个恒定的连接,然后服务器可以随时通过该连接发送数据。这将是webSocket或socket.io选项,或者在某些情况下是SSE(服务器发送的事件),它是连续http的版本。客户端将需要具有检测何时断开连接并根据需要重新建立连接的能力。显然,服务器需要能够处理您支持的每台设备的同时连接(但主要是空闲连接)。如果流量较低,则自定义服务器配置可以支持数十万个连接。典型的共享托管解决方案在这方面受到更多限制,因为它们无法让您访问整个服务器的资源。

  3. 服务器使用客户端中内置的某些现有“推送服务”。此功能适用于将推送服务作为平台一部分的iOS或Android设备。不适用于自定义IoT设备。

  4. 第三方推送服务或库。 Google声称Firebase Cloud Messaging可以与IoT设备一起使用,但我主要只是在寻找启动IoT设备的示例。事件,然后将该事件推送到更多经典设备(电话,浏览器等),而不是从node.js服务器转移到IoT设备。

相关问题