На Node-RED я настраиваю внешний интерфейс, который взаимодействует с серверной частью API, однако я не могу использовать API из-за того, что http «keep-alive» невозможен на узле Node-RED «http request».
Я разрабатываю внешний интерфейс на панели инструментов Node-RED, который взаимодействует с бэкэндом API мыла, который сначала требует входа в API для выполнения последующих запросов API. Серверная часть ожидает, что я сначала отправлю учетные данные на URL-адрес http://10.10.10.10:8888/, а затем ответит новым URL-адресом в заголовке местоположения (пример ответа http://10.10.10.10:8888/lskdh234hv02n), этот новый URL-адрес я должен использовать в следующих запросах API.
Чтобы использовать вновь предоставленный URL-адрес в ответе, первый HTTP-запрос должен держать первоначальный HTTP-запрос открытым с помощью свойства keep-alive. Однако этого не происходит при отправке HTTP-запроса с узла «http-запрос» на Node-RED. Я подтвердил это с помощью wireshark и сравнил захват с другим захватом с помощью postman при выполнении той же активности API.
Когда я использую почтальон, он работает как шарм, и вы можете сказать, что на http происходит поддержка активности.
В Node-RED я попытался ввести заголовок «connection: keep-alive» в узле перед HTTP-запросом, однако Node-Red перезаписывает это значение заголовка конкретно «connection: close\r\n». Я подтвердил это поведение, отправив другие заголовки, такие как User-Agent, Test-Header, я вижу их в своем запросе, и они поступают на сервер, но заголовок соединения все еще идет с «close\r\n»
Вот что я ввожу перед узлом http-запроса для управления заголовком соединения:
msg.headers = {
"connection" : "keep-alive",
"my-custom-header": "samplevalue",
"User-Agent": "My User Agent"
}
return msg;
Я вижу, что «User-Agent» и «my-custom-header» установлены правильно, но «соединение» все еще закрыто.
Теперь я начинаю думать, что узел http-запросов Node-RED не разрешает повторное использование http-соединения (постоянное http-соединение), и мне интересно, есть ли обходной путь для Node-RED, позволяющий ему или некоторым настройкам самого Node-RED сделать он способен поддерживать постоянное http-соединение?
Обновлено: На самом деле, независимо от того, установлено ли в заголовке соединения значение keep-alive или close, я всегда вижу флаг FIN в TCP-соединении, инициированном Node-RED (а не сервером). Похоже, что Node-RED не поддерживает HTTP-соединения с заголовком keep-alive.
Ценю твою помощь





Узел http-запроса в настоящее время не настроен для одного постоянного соединения. Текущая реализация предназначена для выполнения одного запроса для каждого входящего сообщения и последующего вывода одного ответа.
То, что вы описываете, вероятно, является действительным запросом функции, который лучше всего обсуждать на форуме Node-RED, и если вы хотите посмотреть на добавление режима к узлу для повторного использования одного соединения, тогда, вероятно, будет рассмотрен пул реквест. благоприятно (пожалуйста, сначала обсудите на форуме и не открывайте вопрос).
Беглый взгляд на документацию модуля запрос npm подразумевает, что установка параметра forever может помочь.
Нет, это не будет тривиальным изменением. Вам придется провести некоторое исследование, и это потребует выбора опции и, вероятно, большого количества тестов.
Я понимаю. Спасибо хардиллб.
Удалось включить постоянство HTTP, что устранило проблему. Просто я использовал узел www-request (альтернативный расширенный узел, аналогичный основному узлу http-request) и включил функцию навсегда в www-request.
Вам следует создать новую тему на форуме Node-RED, чтобы узнать, примет ли проект запрос на добавление этого в узел.
Хотя немного поздновато. Я сделал пул реквест исходного модуля www-request Node-RED и был объединен, и теперь узел запроса поддерживает возможность включения/отключения постоянного соединения.
Я понимаю. Не могли бы вы помочь, как поместить эту опцию навсегда в узел http-запроса node-red?