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.
         }
     }
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/875009.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s环境搭建(续)

查看节点信息并做快照 kubectl get nodes 将components.yml文件上传到master主机 创建nginx&#xff0c;会在添加一个新的pod kubectl run nginx --imagesnginx:latest 查看nginx的pod信息 [rootk8s-master ~]# kubectl get po -Aowide|grep nginx 出现错误&#xff0c;查…

需求分析概述

为什么要进行需求分析呢&#xff1f; 笑话&#xff1a;富翁娶妻 某富翁想要娶老婆&#xff0c;有三个人选&#xff0c;富翁给了三个女孩各一千元&#xff0c;请 她们把房间装满。第一个女孩买了很多棉花&#xff0c;装满房间的1/2。第 二个女孩买了很多气球&#xff0c;装满…

网络视频流解码显示后花屏问题的分析

问题描述 rtp打包的ps视频流发送到客户端后显示花屏。 数据分析过程 1、用tcpdump抓包 tcpdump -i eth0 -vnn -w rtp.pcap 2、用wireshark提取rtp的payload 保存为record.h264文件 3、用vlc播放器播放 显示花屏 4、提取关键帧 用xxd命令将h264文件转为txt文件 xxd -p…

KEIL中编译51程序 算法计算异常的疑问

KEIL开发 51 单片机程序 算法处理过程中遇到的问题 ...... by 矜辰所致前言 因为产品的更新换代&#xff0c; 把所有温湿度传感器都换成 SHT40 &#xff0c;替换以前的 SHT21。在 STM32 系列产品上的替换都正常&#xff0c;但是在一块 51 内核的无线产品上面&#xff0c;数据…

STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设&#xff08;中断、I2C、USART、SPI等配置&#xff09;在STM32CubeMX中的设置为主&#xff0c;对驱动代码编写不做记录&#xff0c;所以阅读本文最好有标准库开发经验。除第2节外&#xff0c;使用的都是韦东山…

C++的流提取(>>)(输入) 流插入(<<)(输出)

什么是输入和输出流 流提取&#xff08;<<&#xff09;(输入) 理解&#xff1a;我们可以理解为&#xff0c;输入到io流里面&#xff0c;比如是cin&#xff0c;然后从输入流中读取数据 流插入&#xff08;<<&#xff09;&#xff08;输出&#xff09; 理解&#xff…

网络协议头分析

目录 数据的传输与封装过程 以太网完整帧 以太网头部 IP头 TCP头 数据的传输与封装过程 以太网完整帧 ● 对于网络层最大数据帧长度是1500字节 ● 对于链路层最大数据长度是1518字节&#xff08;150014CRC&#xff09;● 发送时候&#xff0c;IP层协议栈程序检测到发送数…

前端 + 接口请求实现 vue 动态路由

前端 接口请求实现 vue 动态路由 在 Vue 应用中&#xff0c;通过前端结合后端接口请求来实现动态路由是一种常见且有效的权限控制方案。这种方法允许前端根据用户的角色和权限&#xff0c;动态生成和加载路由&#xff0c;而不是在应用启动时就固定所有的路由配置。 实现原理…

路由器的固定ip地址是啥意思?固定ip地址有什么好处

‌在当今数字化时代&#xff0c;‌路由器作为连接互联网的重要设备&#xff0c;‌扮演着举足轻重的角色。‌其中&#xff0c;‌路由器的固定IP地址是一个常被提及但可能让人困惑的概念。‌下面跟着虎观代理小二一起将深入探讨路由器的固定IP地址的含义&#xff0c;‌揭示其背后…

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:下(人物动画)

上个博客我们做出了人物的动画机和人物移动跳跃&#xff0c;接下来我们要做出人物展现出来的动画了 我们接下来就要用到动画机了&#xff0c;双击我们的动画机&#xff0c;进入到这样的页面&#xff0c;我这是已经做好的页面&#xff0c;你们是没有这些箭头的 依次像我一样连接…

【Python】Windows下python的下载安装及使用

文章目录 下载安装检测 使用环境搭建下载PycharmPycharm安装 下载 进入官网下载&#xff1a;https://www.python.org/ 点击下载 64位电脑下载该项 安装 勾选 添加至环境变量 使用自定义安装 检测 安装成功后&#xff0c;打开命令提示符窗口&#xff08;winR,输入cmd回车…

红海云 × 紫光同芯 | 数字化驱动芯片领军企业人力资源管理新升级

紫光同芯微电子有限公司&#xff08;以下简称“紫光同芯”&#xff09;是新紫光集团汽车电子与智能芯片板块的核心企业。专注于汽车电子与安全芯片领域&#xff0c;累计出货超过230亿颗&#xff0c;为亚洲、欧洲、美洲、非洲的二十多个国家和地区提供产品和服务。 为进一步提升…

VSC++: 十转十六进制

void 十转十六进制(int 数) {//缘由https://ask.csdn.net/questions/1089023string 十六模 "0123456789ABCDEF", 进制 "";int j 0;cout << 数 << ends; if (!数)cout << "0";while (数)进制.push_back(十六模[数 % 16]), j…

LCS—最长公共子序列

最长公共子序列问题就是求出两个字符串的LCS长度&#xff0c;是一道非常经典的面试题目&#xff0c;因为它的解法是典型的二维动态规划。 比如输入 str1 "babcde", str2 "acbe"&#xff0c;算法应该输出3&#xff0c;因为 str1 和 str2 的最长公共子序列…

【大模型基础】P2 Bag-of-Words

目录 词袋模型 概述词袋模型 实例第1步 构建语料库第2步 对句子进行分词第3步 创建词汇表第4步 转换词袋表示第5步 计算余弦相似度 词袋模型的局限性 词袋模型 概述 词袋模型&#xff0c;Bag-of-Words&#xff0c;是一种简单的文本表示方法&#xff0c;也是 NLP 中的一个经典模…

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2757 标注数量(xml文件个数)&#xff1a;2757 标注数量(txt文件个数)&#xff1a;2757 标注…

因MathType导致word复制粘贴失败,显示:运行时错误‘53’

问题&#xff1a;运行时错误‘53’&#xff1a;文件未找到&#xff1a;MathPage.WLL 解决方法&#xff1a;打开MathType所在文件夹 右击MathType图标->点击“打开文件所在位置”->找到MathPage.WLL文件。 然后&#xff0c;把这个文件复制到该目录下&#xff1a;C:\Progr…

jenkins工具的介绍和gitlab安装

使用方式 替代手动&#xff0c;自动化拉取、集成、构建、测试&#xff1b;是CI/CD持续集成、持续部署主流开发模式中重要工具&#xff1b;必须组件 jenkins-gitlab&#xff0c;代码公共仓库服务器&#xff08;至少6G内存&#xff09;&#xff1b;jenkins-server&#xff0c;需…

论文解读:利用大模型进行基于上下文的OCR校正

论文地址&#xff1a;https://arxiv.org/pdf/2408.17428 背景概述 研究问题&#xff1a;这篇文章要解决的问题是如何利用预训练的语言模型&#xff08;LMs&#xff09;来改进光学字符识别&#xff08;OCR&#xff09;的质量&#xff0c;特别是针对报纸和期刊等复杂布局的文档。…

Jmeter_循环获取请求接口的字段,并写入文件

通过JSON提取器、计数器、beanshell&#xff0c;循环读取邮箱接口的返回字段&#xff0c;筛选出flag为3的收件人&#xff0c;并写入csv文件。 1、调用接口&#xff0c;获取所有的邮件$.data.total.count&#xff1b; 2、beanshell后置处理total转换成页码&#xff0c;这里是227…