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