open62541 客户端断开连接时的 OPC UA 堆栈服务器端回调

Posted

技术标签:

【中文标题】open62541 客户端断开连接时的 OPC UA 堆栈服务器端回调【英文标题】:open62541 OPC UA stack server side callback on client disconnect 【发布时间】:2020-03-27 08:41:21 【问题描述】:

我正在使用 open62541 OPC UA 堆栈版本 1.0 构建服务器。到目前为止效果很好。

当客户端断开连接时,我需要在服务器端进行一些维护。当客户端与 OPC UA 服务器断开连接时,是否有可能执行回调?或者,“会话关闭”或“安全通道关闭”也可以提供帮助。

感谢支持。

编辑: ...所以,我再次检查了访问控制 API 的文档,但我不清楚如何将它应用于我的问题。如果我用

运行服务器
int main(void) 
    signal(SIGINT, stopHandler);
    signal(SIGTERM, stopHandler);
    UA_Server *server = UA_Server_new();
    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
    UA_StatusCode retval = UA_Server_run(server, &running);
    UA_Server_delete(server);
    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;

我只有服务器指针,也许还有配置。从这里开始,当客户端连接/断开连接时,服务器如何通知服务器,我如何捕获此事件,或者我是否需要定期检查是否有使用定时回调的连接客户端?如果是怎么办?游戏中的访问控制 API 又从何而来?

再次感谢

【问题讨论】:

欢迎来到 ***。您调查了什么(文档中的任何提示)? 我调查了 Access Controm API 文档(正如 Schroeder 回答的那样),但我找不到获取访问控制“对象”以及其中连接客户端的状态信息的方法/解决方案......也许我必须使用施罗德发布的链接进行更多调查...... 感谢您的欢迎。 【参考方案1】:

您可以使用访问控制插件 API 来获取客户端连接和断开连接的时间。 (激活会话/关闭会话)。

见:

Access Control documentation

The default plugin as starting point

【讨论】:

感谢您的快速回复,我将在本周或下周尝试应用您的答案并尽快提供反馈。 我是否必须更改 AccessControl_default.c 并将其编译到合并文件 (.c/.h) 中? 您可以替换 UA_ServerConfig 中的 accessControl 并使用您的函数指针和数据初始化 UA_AccessControl 结构。 现在对我来说似乎合法且有意义。我会试一试。非常感谢您的帮助。

以上是关于open62541 客户端断开连接时的 OPC UA 堆栈服务器端回调的主要内容,如果未能解决你的问题,请参考以下文章

OPC UA open62541历史数据读取客户端未编译

基于open62541的OPC UA服务器建立

基于open62541的opc ua 服务器开发实现

如何使用 open62541 一次使用 OPC-UA 编写多个节点?

open62541:同时获取订阅的所有变更监控项

使用 open62541 的基本时间序列(ADC)传输架构