Открытая связь между двумя машинами

Я пытаюсь соединить две машины. Облачная служба Azure (A) с машиной Linux (B), которая не принадлежит Windows Azure. То, что я пытаюсь сделать, - это установить открытую связь между А и В. Чтобы А мог знать, что В жив. Я не могу пропинговать B непосредственно от A, потому что B будет во внутренней сети. У B нет публичного IP, на который я мог бы пинговать. Другими словами, B подключится к интернету через маршрутизатор. Мне нужно отправить некоторые команды в B из Интернета через A. Вот почему мне нужно сохранять открытую связь между A и B. Какие-нибудь решения, идеи или статьи, которые я мог бы прочитать, чтобы достичь этого?

Вот схема инфраструктуры для более подробной информациивведите описание здесь

1 ответ

Решение

Что вы хотите сделать, это изменить логику в клиентских системах - вместо подключения каждые 15 минут, например:

  • Открыть TCP-соединение с сервером контроллера
  • Регистрироваться
  • Закрыть TCP соединение

Пусть они сделают это..

  • Открыть TCP соединение с сервером
  • Определите себя, проверьте файл конфигурации
  • .. жду команд..
  • Сбой соединения или его закрытие? Откройте это снова! (Установите разумный таймер повтора)

Таким образом, центральный сервер может отправлять данные на узлы при необходимости, например, обновлять свои файлы конфигурации на лету - каждая из видеосистем будет подключена к нему и сможет немедленно принимать обновления с сервера. Системы электронной почты Push работают по существу по тому же механизму - клиент держит соединение открытым с сервером, и сервер может отправлять ему новые данные, как только это необходимо.

В зависимости от архитектуры вашего приложения, для этого может иметь смысл подключить какую-либо систему очереди сообщений; Я не знаком со спецификой протокола связи большинства MQ (и если они будут работать с вашей настройкой сети), но что-то вроде Redis Pub/Sub кажется подходящим.

Другие вопросы по тегам