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. Если сеанс выключен, клиент будет перезапущен. Когда сеанс завершен, сервер может отправить что-нибудь клиенту, так как он инициирован клиентом.