节点js打字稿ws

时间:2020-07-13 10:50:14

标签: typescript pi ws

我有一个不寻常的情况。我在一个节点组中有x个Raspberry Pi。第一个Pi被指定为父pi。它的工作是向剩余的Pis发出需要发生的事件的警报,其他Pis子报告报告确认通过父Pi控制的Websocket接收消息。

这很好。

边缘情况#1,如果Pi脱机,在发送警报之前,我尝试连接x次。一切正常。

边缘情况#2如果主服务器脱机,我需要以某种方式选择另一个父节点并创建一个新的套接字,并且我需要提醒其他Pis切换到该新套接字。由于套接字不再可用,因此Pi之间的通信不存在。

每个Pi在一开始就被设置为父母和孩子,并存储在一个集合中,但未激活。列表中的第一个Pi被选为Parent,所有的Pi都被正确激活为Parent和child。

仅当父级脱机30秒时,才必须选择新的父级,但是由于套接字已消失,它们无法通信,因此基于哪个首先进行切换,它是父级,但都不是其他的Pis会知道选择了一个新的父级,并尝试创建自己的套接字,该套接字将无法工作。

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

在使用动态IP的情况下,您可以收集主父服务器上的所有客户端IP地址,并将其发送给所有客户端,并带有注释,以防万一主父服务器出现故障,该地址应为新父服务器。像是父母的遗嘱。

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