节点 js 打字稿 ws

node js typescript ws

我的情况有点不寻常。我在一个节点组中有 x 个树莓派。第一个 Pi 指定为 parent pi。它的工作是提醒其余的 Pis 需要发生的事件,另一个 children Pis 报告确认通过 Parent Pi 控制的 websocket 接收消息。

这很好用。

边缘情况 #1 如果 Pi 离线,我会在发送警报之前重试连接 x 次。这工作正常。

边缘情况 #2 如果主节点离线,我需要以某种方式 select 另一个 parent 并创建一个新套接字,我需要提醒其他树莓派切换到那个新套接字。由于套接字不再可用,树莓派之间的通信不存在。

每个 Pi 在开始时都设置为 parent 和 child 并存储在一个集合中,但未激活。列表中的第一个 Pi selected 为 Parent,并且所有 Pi 都被正确激活为 parent 和 children。

只有当parent掉线30秒后,才需要parent重新select,但是由于socket没了,所以无法通信,所以根据第一个切换的是 parent,但是另一个 Pis 的 none 会知道一个新的 parent 被 selected 并尝试创建他们自己的套接字,这是行不通的。

所以我的问题是处理这种情况的最佳方法是什么?我尝试了几种方法来尝试确定哪个是新的Parent,但他们都提出了不同的选择,造成了混乱。

非常感谢您提出的任何建议。

谢谢!

您使用静态还是动态 IP 地址?
如果是静态 IP,您可以在每个 PI 上存储所有 IP 的列表,并定义一个顺序,当真实 IP 掉线时,它们将尝试连接到新的 parent。

如果是动态 IP,您可以收集主控 parent 上的所有客户端 IP 地址,并将它们发送给所有客户端,并附上一条注释,如果主控 parent,哪个应该是新的 parent =17=] 下降。有点像 parent.

的遗愿

第三种选择是使用 WebRTC,它使您可以直接在每个 Pi 之间进行通信。但我认为这对于后备计划来说太复杂了。