IIS? Apache? Node.js? Или может быть Go?
Маленький эксперимент об альтернативном подходе к обработке HTTP запросов в 1С с помощью прослойки на Go.
- Описание
- Подробнее
Описание
Предисловие
Статья вдохновлена публикацией IIS? Apache? А может быть, Node.js?. Рекомендую сначала прочитать её, а потом уже мой "отчет об эксперименте".
Проблема
Наткнувшись недавно на статью IIS? Apache? А может быть, Node.js? я узнал о новом способе обработки HTTP запросов, о котором я даже никогда не задумывался. Суть была в том, что бы использовать в качестве обработчика HTTP запросов не 1С, а Node JS, в коде которого создается COM соединение с 1С которое выполняет в себе обработку запроса. Идея прекрасна, так как в таком раскладе можно использовать NGINX, который гораздо лучше ведет себя в нагрузках, да и в целом он более современный и является де-факто в современном мире WEB.
В комментариях основной претензией к такому способу стало использование COM объекта, так как этот механизм стар и уже изжил своё (с чем я не могу не согласится). И я задумался о том, как еще можно обрабатывать HTTP запросы в 1С не используя HTTP сервисы.
Идея
Мне пришла в голову идея: что если создать сервис, который будет принимать на себя HTTP запросы и иметь HTTP интерфейс для обработки этих запросов.
Алгоритм следующий:
- Запрос, например /test попадает в Сервис обработки запросов (далее СОЗ) и ждёт, когда его смогут обработать.
- В 1С запущен фоновый обработчик (или обработчики, что бы увеличить количество потоков обработки), который в бесконечном цикле делает long-polling запрос к СОЗ (например /request) и ждёт от него запрос для обработки.
- 1С получает в ответ на /request запрос для обработки с какими то данными, что-то с ними делает и снова отправляет HTTP запрос в СОЗ (например /response) с результатом обработки.
- СОЗ получает результат обработки и отвечает клиенту.

Реализация
Для написания простейшего СОЗ я выбрал Go так как он, по моему мнению, лучше всего подходит для этих целей. Он "простой", быстрый, надежный и многие позиционируют его как язык для написания микросервисов, коим наш СОЗ и является.
Сервис написан в стиле "простыня" или "на коленке" и не является "production ready" решением. Если хотите использовать его для себя, то необходимо внести доработки: сделать хоть какую то модульность, предусмотреть обработку ошибок, логирование и т.д.
