node-opcua, ошибка записи: время транзакции истекло

Я использую node-opcua 0.0.64. Я пытаюсь записать логическое значение для одной переменной, используя метод записи opcuaSession в моем клиенте. Некоторые звонки успешны, но около 70% - нет. Ровно через 60 секунд в ответе "Время транзакции истекло", код состояния "statusCode" - "неопределенная ошибка". Могу ли я сделать некоторые действия в клиенте? Как насчет transportTimeout? Я считаю, что он установлен на 10000 по умолчанию.

1 ответ

Сервер прервет соединение, если между клиентом и сервером не было выполнено ни одной транзакции в течение интервала времени ожидания сеанса.

Чтобы убедиться, что соединение остается, клиент обычно использует 2 метода:

  • либо регулярно выполнять транзакцию ReadRequest (например, чтение ServerStatus)

  • установить пустую подписку. Подписки имеют встроенный механизм поддержки активности, который заставляет клиента и сервер время от времени обмениваться данными хотя бы с пустым PublishRequest/PublishResponse.

Обратите внимание, что вы можете пройти keepSessionAlive: true в качестве параметра для вашего клиента NodeOPCUA, чтобы установить периодическое чтение ServerStatus.

В качестве альтернативы, тайм-аут для конкретного writeRequest может быть вызван самим сервером, если он не отвечает в течение выделенного времени для продолжения запроса. В этом случае это в значительной степени будет проблемой самой реализации сервера.

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