node-opcua, ошибка записи: время транзакции истекло
Я использую node-opcua 0.0.64. Я пытаюсь записать логическое значение для одной переменной, используя метод записи opcuaSession в моем клиенте. Некоторые звонки успешны, но около 70% - нет. Ровно через 60 секунд в ответе "Время транзакции истекло", код состояния "statusCode" - "неопределенная ошибка". Могу ли я сделать некоторые действия в клиенте? Как насчет transportTimeout? Я считаю, что он установлен на 10000 по умолчанию.
1 ответ
Сервер прервет соединение, если между клиентом и сервером не было выполнено ни одной транзакции в течение интервала времени ожидания сеанса.
Чтобы убедиться, что соединение остается, клиент обычно использует 2 метода:
либо регулярно выполнять транзакцию ReadRequest (например, чтение ServerStatus)
установить пустую подписку. Подписки имеют встроенный механизм поддержки активности, который заставляет клиента и сервер время от времени обмениваться данными хотя бы с пустым PublishRequest/PublishResponse.
Обратите внимание, что вы можете пройти keepSessionAlive: true
в качестве параметра для вашего клиента NodeOPCUA, чтобы установить периодическое чтение ServerStatus.
В качестве альтернативы, тайм-аут для конкретного writeRequest может быть вызван самим сервером, если он не отвечает в течение выделенного времени для продолжения запроса. В этом случае это в значительной степени будет проблемой самой реализации сервера.