node js машинопись ws - PullRequest
       159

node js машинопись ws

0 голосов
/ 13 июля 2020

У меня несколько необычная ситуация. У меня есть x количество Raspberry Pis в группе узлов. Первый Pi обозначается как родительский пи. Его работа состоит в том, чтобы предупредить оставшихся Pis о событии, которое должно произойти, а другие дочерние Pis сообщают, что подтверждают получение сообщений через веб-сокет, которым управляет родительский Pi.

Это отлично работает. 1004 * Пограничный случай №1, если Pi переходит в автономный режим, я пытаюсь подключиться x количество раз перед отправкой предупреждения. Это работает нормально.

Edge case # 2 Если мастер отключается, мне нужно каким-то образом выбрать другого родителя и создать новый сокет, и мне нужно предупредить другой Pis о переключении на этот новый сокет. Поскольку сокет больше не доступен, связь между Pis отсутствует.

Каждый Pi изначально настроен как родительский и дочерний и сохраняется в коллекции, но не активируется. Первый Pi в списке выбран как родительский, и все они правильно активированы как родительский и дочерний.

Только когда родитель отключается на 30 секунд, новый родитель должен быть выбран, но поскольку сокет ушел, они не могут связаться, поэтому, в зависимости от того, какой из них первым делает переключение, это родитель, но никто из других Pis не узнает, что выбран новый родительский элемент, и пытается создать свой собственный сокет, что не сработает.

Итак, мой вопрос: как лучше всего справиться с этой ситуацией? Я пробовал несколько методов, чтобы попытаться определить, какой из них является новым Родителем, но все они предлагают разные варианты, создавая беспорядок.

Я очень благодарен за любые ваши предложения.

Спасибо!

1 Ответ

1 голос
/ 13 июля 2020

Используете ли вы статические c или динамические c IP-адреса? В случае статических c IP-адресов вы можете сохранить список всех IP-адресов для каждого PI и определить порядок, в котором они будут пытаться подключиться к новому родительскому объекту, когда реальный будет отключен.

В случае динамического c IP-адресов, вы можете собрать все IP-адреса клиентов на главном родительском элементе и отправить их всем клиентам с примечанием, какой из них должен быть новым родительским на случай, если главный родительский элемент выйдет из строя. Что-то вроде последней воли родителя.

Третий вариант - использовать WebRT C, который позволяет вам напрямую общаться между каждым Pi. Но я думаю, что это было бы слишком сложно только для запасного плана.

...