Adaptive AUTOSAR CM模块介绍(五)

Proxy Class API’s
在这里插入图片描述
proxy class类提供类(静态)方法来FindService() 实例,服务是动态的,因此,AUTOSAR提供了两个方法来提供发现服务。

  • StartFindService():是一个类方法,它在后台启动一个周期性的“FindService”活动,在没有找到服务之前,一直周期的运行。这个周期是可以用户自定义的,一般来讲,系统服务会先发送三此find 服务,直到寻找到服务,然后返回已找到服务的反馈。
  • FindService()是一次性的响应,用户调用一次就会返回一次结果,是实时性的。

注意这两种方式的实例标识符不一样:

  • ara::com::InstanceIdentifier
  • ara::core::InstanceSpecifier

FindService 返回匹配服务实例的句柄容器,如果没有发现实例,该容器为空。
与此相反,StartFindService返回一个FindServiceHandle,他提供方法来停止监视服务实例的后台活动。每当绑定的实例检测到时,证明服务实例的可用性,这个服务句柄的列表就会更新。
在被调用后,StartFindService的行为与FindService相似,它将使用当前可用的服务触发用户提供的处理程序函数。
无论使用一次性的 FindService 还是 StartFindService,在这两种情况下,都会获得一个用于标识(可能是远程)服务实例的句柄,这个句柄就能创建proxy的实例对象。
考虑这样的情况:如果服务实例出现故障,然后再次出现,会发生什么情况,例如由于某些生命周期状态的变化?服务中的现有代理实例是否可以当服务实例再次可用时,proxy端能不能被重用?这是大部分工程师都会困扰的地方,也是bug很多的地方,需要知道原理,在解bug的时候才能游刃有余,有理论依据。
AUTOSAR为了解决这个问题,当FindService在其生命周期,发现有问题以后,会在客户端进行(重新)订阅的动作。SOMEI/IP SD服务发现的功能会重新发现服务,知道服务能正常提供。

  • GetSubscriptionState()会返回当前的订阅状态
  • 重新调用FindService()得到实例句柄
  • 或者
  • 注册 FindServiceHandler,在服务实例获得时调用向下或向上使用新手柄。然后从新句柄重新创建代理实例(注意这需要重新订阅event服务)。

如果已经注册了 FindServiceHandler,它还提供了“自动更新”的功能。
应用程序开发人员可以调用FindServiceHandler查找服务处理程序中的现有proxy实例,当proxy实例的句柄在调用中可以返回结果,表明服务实例是又起来了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值