Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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