当前位置: 首页 > news >正文

AUTOSAR_EXP_ARAComAPI的5章笔记(3)

5.3.4 Finding Services

Proxy Class提供类(静态)方法来查找“连接”的服务实例。由于服务实例的可用性本质上是动态的(因为它有一个生命周期),所以ara::com提供了如下两种不同的方法来实现“FindService ”:

  • StartFindService是一个类方法,它在后台启动一个连续的“FindService”活动,当服务实例的可用性发生变化时,它会通过回调通知调用者。
  • FindService是一次性调用,它在调用后返回一个可用的服务实例。

根据采用实例标识符的不同,存在两种不同的重载方式(参见第4.8.1小节):

  • 一个使用ara::com::InstanceIdentifier
  • 一个采用ara::core::InstanceSpecifier

请注意,只有技术绑定将用于查找/搜索,这些绑定是由服务接口部署形式服务实例清单中的相应服务接口配置的。

同步的一次性变体**FindService为匹配的服务实例返回一个句柄容器**(参见5.3.3小节),如果当前没有匹配的服务实例,那么这个容器也可能是空的。

与此相反,StartFindService返回一个FindServiceHandle,该句柄可通过调用StopFindService来停止正在进行的监视服务实例可用性的后台活动。

StartFindService的第一个(特定于此变体)参数是用户提供的处理函数,具有以下签名:

using FindServiceHandler = std::function<void(ServiceHandleContainer<T>, 
FindServiceHandle)>;

每当绑定检测到在对**StartFindService的调用匹配的服务实例的可用性已经改变时,它将调用用户提供的处理程序**,该处理程序具有现在可用的服务实例的句柄的更新列表。

在被调用后,StartFindService的行为与FindService相似,它将使用当前可用的服务实例触发用户提供的处理函数,这些服务实例也可能是空的句柄列表。

在初始回调之后,如果初始服务可用性发生变化,它将再次调用提供的处理程序。 请注意,ara::com用户/开发人员确实可以在用户提供的处理程序中调用StopFindService,这是显式允许的。

为此,处理程序显式获取FindServiceHandle参数。处理者不必是可重入的。这意味着,绑定实现者必须负责序列化对用户提供的处理函数的调用。

请注意,当用作FindService的返回值或FindServiceHandler的参数时,ServiceHandleContainer可以实现为分配或非分配容器,只要它满足C++编程语言的一般和序列容器要求。

5.3.4.1 Auto Update Proxy instance

无论您使用一次性的FindService还是StartFindService变体,在这两种情况下,您都会获得一个标识服务实例的句柄,然后从该句柄创建Proxy实例。但是,这里抛出2种重用的问题:

  • 如果服务实例停止运行,然后又重新运行(例如,由于一些生命周期状态变化),会发生什么情况呢?

  • 当服务实例再次可用时,服务消费者端的现有代理实例还能被重用吗?

    好消息是: ara::com的设计团队要求从绑定实现中解决以上2种重用的问题,因为这样能够简化了实现服务消费者的任务。 在基于服务的通信领域中,预计在整个系统(例如车辆)的生命周期期间,服务的提供者(服务端)和消费者(客户端)的实例由于自身的生命周期概念而频繁地启动和停止。 为了解决这个问题,ara::com的团队设计了服务发现,服务的提供者和消费者的生命周期在服务提供和(再)订阅方面受到监控! 如果一个服务消费者应用程序已经从一些FindService变量返回的句柄实例化了一个服务代理实例,可能发生的顺序如下图所示。

图片解释如下:

  • T0:服务消费者可能成功调用该代理的服务方法(根据5.3.5.2,订阅事件上的GetSubscriptionState()将返回kSubscribed)。
  • T1:通过服务发现,通知服务实例关闭。
  • T2:在Service Proxy上调用服务方法将导致kServiceNotAvailable错误,因为调用的目标服务实例不再存在。相应地,任何订阅事件上的GetSubscriptionState()将在此时返回kSubscriptionPending(参见5.3.5.2 ),即使该事件之前已经被成功订阅(kSubscribed)。
  • T3:通过服务发现通知,服务实例再次出现。Service Proxy侧的通信管理将被通知,并且将利用传输层寻址信息来静默地更新Proxy实例。图中显示了代理的传输层部分,它将颜色从蓝色更改为玫瑰色。
  • T4: Proxy实例上的服务方法调用将再次成功,服务消费者之前订阅的事件上的GetSubscriptionState()将再次返回kSubscribed

Proxy实例的如上行为,可以使客户端应用程序的实现者免于以下操作:

  • 通过GetSubscriptionState()对事件进行轮询,因为在服务实例已关闭的情况下才需要调用GetSubscriptionState()
  • 重新调用一次FindService以获得新的句柄。
  • 重新注册一个FindServiceHandler,在服务实例使用新句柄时,关闭或启动时调用它, 然后从新句柄重新创建代理实例(并重做所需的事件订阅调用)。

请注意,如果您已经注册了FindServiceHandler,那么绑定实现必须确保在调用已注册的FindServiceHandler之前对现有的Proxy实例进行“自动更新”! 这样做的原因是:当给出Proxy实例的句柄时,应该支持应用程序开发者与FindServiceHandler中的现有Proxy实例进行交互,用信号通知服务实例再次启动。 下面的代码片段显示了这种期望:

/*** Reference to radar instance, we work with,* initialized during startup*/RadarServiceProxy *myRadarProxy;void radarServiceAvailabilityHandler(ServiceHandleContainer<RadarServiceProxy::HandleType> curHandles, FindServiceHandle handle) {for (RadarServiceProxy::HandleType handle : curHandles) {if (handle.GetInstanceId() == myRadarProxy->GetHandle().GetInstanceId()) {/**This call on the proxy instance shall NOT lead to an exception, regarding service instance not reachable, since proxy instance should be already auto updated at this point in time.*/ara::core::Future<Calibrate::Output> out = myRadarProxy->Calibrate("test");// ... do something with out.}}}

相关文章:

AUTOSAR_EXP_ARAComAPI的5章笔记(3)

5.3.4 Finding Services Proxy Class提供类(静态)方法来查找“连接”的服务实例。由于服务实例的可用性本质上是动态的(因为它有一个生命周期)&#xff0c;所以ara::com提供了如下两种不同的方法来实现“FindService ”: StartFindService是一个类方法&#xff0c;它在后台启…...

【Godot4.3】基于纯绘图函数自定义的线框图控件

概述 同样是来自2023年7月份的一项实验性工作&#xff0c;基于纯绘图函数扩展的一套线框图控件。初期只实现了三个组件&#xff0c;矩形、占位框和垂直滚动条。 本文中的三个控件类已经经过了继承化的修改&#xff0c;使得代码更少。它们的继承关系如下&#xff1a; 源代码 W…...

申万宏源证券完善金融服务最后一公里闭环,让金融服务“零距离、全天候”

在数字化转型的浪潮中&#xff0c;申万宏源作为金融行业的先锋&#xff0c;持续探索科技如何赋能金融服务&#xff0c;以提升企业效率并优化客户服务体验。面对日益增长的视频化需求&#xff0c;传统的图文形式已难以满足市场与用户的新期待。为了应对这一挑战&#xff0c;申万…...

无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了。

智慧工业视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…...

系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践

本章考点&#xff1a; 第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲&#xff0c;本课时知识点会涉及案例分析题&#xff08;25分&#xff09;。在历年考试中&#xff0c;案例题对该部分内容都有固定考查&#xff0c;综合知识选择题目中有固定分值…...

centos8stream 修改为阿里云yum源

centos8stream 官方已经不再维护&#xff0c;导致该系统官方源实效&#xff0c;可以使用阿里云源进行替换 阿里云文档&#xff1a;centos-vault镜像_centos-vault下载地址_centos-vault安装教程-阿里巴巴开源镜像站 (aliyun.com) 咱们只需要执行下面命令&#xff0c;即可替换官…...

python转换并提取pdf文件中的图片

#安装fitz包 pip install pymupdf 脚本如下所示&#xff1a; import fitz import re import os import time import sysarguments sys.argvfor arg in arguments:print(arg)def file_name_list(base_dir):for i, j, k in os.walk(base_dir):name [i.replace(.pdf, ) for i …...

【MySQL】MySQL常用的数据类型——表的操作

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解关于MySQL常用数据类型&#xff0c;表的简单使用&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;http://t.csdnimg.cn/wwaqe &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondl…...

自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列五十三文本聚类算法》文本聚类介绍及相关算法K…...

计算机网络(一) —— 网络基础入门

目录 一&#xff0c;关于网络 二&#xff0c;协议 2.1 协议是什么&#xff0c;有什么用&#xff1f; 2.2 协议标准谁定的&#xff1f; 2.3 协议分层 2.4 OSI 七层模型 2.5 TCP/IP 四层模型 三&#xff0c;网络传输基本流程 3.1 局域网中两台主机通信* 3.2 报文的封装与…...

从监控到智能:EasyCVR视频汇聚平台助力加油站安全监管升级转型

随着科技的不断进步&#xff0c;视频监控技术在各个行业的应用日益广泛&#xff0c;尤其在加油站这一关键领域&#xff0c;视频智能监管系统的应用显得尤为重要。TSINGSEE青犀视频EasyCVR视频汇聚平台作为一款基于“云-边-端”一体化架构的视频融合与AI智能分析平台&#xff0c…...

日志服务管理

系统日志管理 sysklogd 系统日志服务 在 CentOS5 以及之前的发行版中&#xff0c;其采用的 sysklogd 服务来记录和管理系统日志的。 sysklogd 服务有两个模块&#xff1a; klogd&#xff1a; 用于记录 linux kernel 相关的日志 syslogd&#xff1a;用于记录用户空间应用日志…...

ROS 工具箱系统要求

ROS 工具箱系统要求 要为 ROS 或 ROS 2 生成自定义消息&#xff0c;或从 MATLAB 或 Simulink 软件中部署 ROS 或 ROS 2 节点&#xff0c;您必须构建必要的 ROS 或 ROS 2 软件包。要构建这些软件包&#xff0c;您必须具备 Python 软件、CMake 软件以及适用于您的平台的 C 编译器…...

CSS解析:定位和层叠上下文

许多开发人员对定位的理解很粗略&#xff0c;如果不完全了解定位&#xff0c;就很容易给自己挖坑。有时候可能会把错误的元素放在其他元素前面&#xff0c;要解决这个问题却没有那么简单。 一般的布局方法是用各种操作来控制文档流的行为。定位则不同&#xff1a;它将元素彻底…...

无名管道与有名管道的区别(C语言)

目录 一、引言 二、无名管道&#xff08;匿名管道&#xff09; 1.概念 2.特点 3.使用方法 三、有名管道&#xff08;命名管道&#xff09; 1.概念 2.特点 3.使用方法 四、总结 本文将详细介绍在C语言中无名管道&#xff08;匿名管道&#xff09;与有名管道&#xff08;命名…...

Vue+Nginx前端项目多种方式部署一文搞定(练习源码自取)

目录 介绍 本地项目部署 nginx部署 云端服务器部署 介绍 对于Vue项目而言&#xff0c;Nginx可以轻松地配置来处理SPA的路由问题&#xff0c;即对于所有未定义的路径请求返回index.html&#xff0c;这样前端路由机制就可以接管URL的处理。此外&#xff0c;Nginx支持反向代理设…...

MATLAB 中双引号 ““ 和单引号 ‘‘ 的区别详解

在 MATLAB 中&#xff0c;双引号 "" 和单引号 都可以用来表示字符串&#xff0c;但它们的作用和底层类型是不同的。理解它们之间的区别&#xff0c;对于正确使用字符串处理功能非常重要。本文将深入探讨 MATLAB 中 "" 和 的区别&#xff0c;以及在实际编…...

Linux概述、远程连接、常用命令

Linux介绍 Linux操作系统介绍 Linux操作系统的特点 开源免费安全稳定可移植性好 Linux可以安装在不同的设备上 高性能 Linux的使用领域 应用服务器数据库服务器网络服务器虚拟化云计算嵌入式领域个人PC移动手机 Linux文件系统和目录 /&#xff1a;根目录&#xff0c;唯一/h…...

闯关leetcode——1.Two Sum

大纲 题目地址内容 解题 题目 地址 https://leetcode.com/problems/two-sum/description/ 内容 Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would hav…...

02 Shell Script注释和debug

Shell Script注释和debug 一、ShellScript注释 ​ # 代表不解释不执行 ​ 语法&#xff1a;# # 创建myshell.sh文件 [rootlocalhost ~]# vi myshell.sh # 写入内容 #!/bin/bash# 打印hello world&#xff08;正确&#xff09; echo "hello world" echo "he…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...