我正在用Visual C#构建一个OPCUA服务器,并将其放在客户端的机器上。
客户端希望确保在服务器上调用的具有物理后果的方法在所有其他请求上具有优先级,例如,如果服务器具有10个活动客户端会话,并且这些客户端中的9个发送读/写请求,并且其中一个发送机器人手臂的移动命令,则应该首先执行该命令,并且读/写操作应该稍后完成。
出于安全原因,这是有意义的:我不想在服务器到达conveyor_belt_stop()命令之前等待9次读取操作,该命令是为了防止人员受伤而发出的。
请求管理由ServerSDK在内部处理,因此无法实现自定义请求处理策略。
我研究了SDK of choice的代码,发现它向Queue对象添加请求,并使用工作线程来满足请求。由于Queue是FIFO队列,因此不可能以某种方式重新排列请求以支持我想要的请求。
现在,我计划使用示例客户机来对这种队列机制的延迟进行基准测试,并相信OPCUA开发人员这是正确的方法,但我希望为我的客户机提供更好的答案。
OPCUA是否提供了一种方法来定义客户端或服务器端请求处理的优先级?
1条答案
按热度按时间vyswwuz21#
OPCUA是否提供了一种方法来定义客户端或服务器端请求处理的优先级?
不,不是的。
但我认为你误解了你所链接的SDK的实现。它不会将请求排队并逐个处理它们。您链接到的对象是Dictionary,而不是Queue,它用于其他簿记目的。
也就是说,您可以考虑保持2个会话打开,并使用其中一个会话作为“高优先级”会话,在该会话中,您只发出方法调用或应用程序认为高优先级的其他操作。