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