Предположим, что 3 узла подписаны на изменение данных (которые автоматически сохраняются в словаре self._monitored_items(), предоставляемом asyncua). В этом случае, если какой-либо из узлов становится недоступным на какое-то время, а затем снова становится доступным, то как будет происходить клиент знает, что узел снова в сети?
Код: Выделить всё
async with client:
# We create a Client Subscription.
subscription = await client.create_subscription(50, handler)
nodes = [
client.get_node('ns=3;i=1025'),
client.get_node('ns=3;i=1026'),
client.get_node('ns=3;i=1027')
]
handle = await subscription.subscribe_data_change(nodes)
print(subscription._monitored_items)
Я пробовал использовать метод read_value, который периодически проверяет значение каждого узла, и если мы получаем значение, это означает, что узел доступен..... но проблема в том, что если мой период проверки составляет 10 секунд, и узел становится доступным в течение первых 2 секунд, данные за 8 секунд теряются.
Код: Выделить всё
async def check_node_availability(node):
""" Check if the node is still available on the server by reading its value. """
try:
await node.read_value()
return True
except Exception as e:
# print(f'Failed to read node {node}: {e}')
return False
Как предотвратить упомянутую выше потерю данных?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... bscription