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

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


person P. Deyna    schedule 11.07.2017    source источник


Ответы (1)


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

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

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

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

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

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

person Etienne    schedule 04.01.2018