HTTP-клиент, действующий как псевдосервер

Допустим, я собираюсь развернуть серверное приложение, которое, вероятно, будет размещено за NAT/ межсетевым экраном, и я не хочу просить пользователей настроить их сопоставление портов NAT. Другими словами, подключения к серверу невозможны, но мое приложение по своей природе является серверным приложением, то есть оно отправляет обратно объекты по URI.

Теперь я думаю о том, чтобы периодически инициировать соединения с сервера, чтобы посмотреть, на какие запросы нужно отвечать. Я собираюсь использовать HTTP через порт 80 как то, что, вероятно, будет работать через NAT/firewall практически из любого места.

Вопрос в том, существуют ли какие-либо стандартные соображения и общие практики реализации клиента, который может выступать в качестве сервера на уровне приложений, в частности, с использованием HTTP? Какие-нибудь специальные заголовки HTTP? Шаблоны проектирования?

Например, я думаю о следующей схеме:

  • Клиент (который является моим логическим сервером) отправляет фиктивный HTTP-запрос на сервер
  • Сервер отвечает нестандартными заголовками X-Request-URI:, X-Host:, X-If-Modified-Since: и т. д., другими словами, заголовки запроса, обернутые в X-xxx, поскольку они не являются стандартными в этой ситуации; также просит сохранить соединение живым
  • Клиент отвечает запросом POST, который отправляет запрошенный объект; опять же, использует обернутые заголовки (например, X-Status:, так далее)

Если нет более "стандартного" способа сделать что-то подобное, вы думаете, мой подход правдоподобен?

Редактировать: интересная дискуссия состоялась на Reddit здесь

1 ответ

Я сделал что-то подобное. Это очень распространено. Клиент инициирует соединение с Сервером и поддерживает соединение ALIVE. Если сеанс выключен, клиент будет перезапущен. Когда сеанс завершен, сервер может отправить что-нибудь клиенту, так как он инициирован клиентом.

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