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

通信易懂唠唠SOME/IP——SOME/IP-SD服务发现阶段和应答行为

一 SOME/IP-SD服务发现阶划分

服务发现应该包含3个阶段

1.1 Initial Wait Phase初始等待阶段

  • 初始等待阶段的作用

初始等待阶段是服务发现过程中的一个阶段。在这个阶段,服务发现模块等待服务实例的相关条件满足,以便继续后续的发现和注册过程。

对于客户端服务实例,当务实例所需的网络接口链接已经建立,即网络接口处于 "up" 状态且应用需要这个服务时即进入初始等待阶段。

在实际的实现中,应用需要某个服务一般是生成到配置文件中,当配置文件中有这个实例id,就认为应用需要这个服务。

对于服务器端服务实例,当务实例所需的网络接口链接已经建立,即网络接口处于 "up" 状态且服务可用。即服务器服务已经启动并准备好接受请求。服务准备好一般和具体功能有关系,比如camera service等camera初始化完成。

  • 初始等待阶段的等待时间INITIAL_DELAY

初始等待阶段等待的时间取决于INITIAL_DELAY值得设置。NITIAL_DELAY应该设置一个最大值和一个最小值,实际等待时间是介于最大值和最小值之间的一个随机值。

下面重复阶段和主阶段都是以Provider instance为例的,request insatnce类似,后面会对不一样的地方单独说明。

1.2 Repetition Phase重复阶段

初始等待阶段等待时间到了之后,会发送第一条offer service消息,这时候就进入了重复阶段。

进入重复阶段后

第一次等待REPETITIONS_BASE_DELAY时间后发送第二条offer service消息

然后在等待上一次等待时间的2倍时间发送下一条offer service消息。

如此重复,最大重复次数为REPETITIONS_MAX。这里参数比较多不好理解,可以结合1.5部分的例子增加理解。。

1.3 Main Phase 主阶段

重复阶段结束之后,立马进入在主阶段,先等待1*CYCLIC_OFFER_DELAY时间发送offer service消息,之后以CYCLIC_OFFER_DELAY配置的周期,周期发送offer service 消息。

1.4 client service insatnce的三个阶段

上面是以server端instance为例说明的三个阶段,对于client instance类似。

初始等待阶段和重复阶段与服务端instance类似,只不过发的是find service报文。

不同之处是,find service没有主阶段,即重复阶段之后就不会再发送find 报文了。

Subscribe EventGroup Entries由周期offer service触发,也是周期发送。所以在主阶段我们会看到周期的Offer Service报文和周期的Subscribe报文。

1.5举个例子:

上图是server service instance的各个参数,INITIAL_DELAY的最大值和最小值分别为0.1秒和0.01秒。REPETITIONS_BASE_DELAY是0.5秒,REPETITIONS_MAX是3。按照配置预期的服务发现的行为是:

1)Initial Wait Phase:服务实例化--》等待0.01秒~0.1秒之间的一个时间

2)Repetition Phase:然后发送第一帧数据(即offer service报文)--》延时2^0*0.5s=500ms-》发送offer service--》延时2^1*0.5s=1s时间--》发送offer service--》延时2^2*0.5s=2s时间-》发送offer service。即重复发3次offer service,共发4次报文,每次等待时间是上一次的两倍

3)Main Phase:之后按照3秒周期发送

抓到报文也确实如我们所想

上图第二列是距离上一帧数据的时间,单位秒,可以发现与预期现象一致

第一次offer service 

第二次时间-第一次时间约等于500ms

第三次时间-第二次时间约等于1s

第四次时间-第三次时间约等于2s

之后时间间隔都是约等于3s

这样设计的意义也很好理解,即发送的频率越来越慢,如果一开始发送的频率慢,不利于找到服务,如果一直高频率发送,又增加网络负载。

二 服务发现Answer Behavior应答行为

服务发现阶段的应答行为

  • 服务端收到find service entry后回复offer service entry

    服务端收到find service entry的unicast falg=1,且收到find service的时间距离上一次发送offer service的时间<1/2  的CYCLIC_OFFER_DELAY,则回复一个单播offer service。

       服务端收到find service entry的unicast falg=1,且收到find service的时间距离上一次发送offer service的时间>=1/2  的CYCLIC_OFFER_DELAY,则回复一个多播的offer service

如果REQUEST_RESPONSE_DELAY值设置为0,则是立即回复offer service。

如果REQUEST_RESPONSE_DELAY值不是0,则是delay一个介REQUEST_RESPONSE_DELAY最大值和最小值之间的一个值再回复单播offer service。

  • 客户端收到多播offer service entry后回复单播subscribe entry

     如果REQUEST_RESPONSE_DELAY值设置为0,则是立即回复单播subscribe entry。

    如果REQUEST_RESPONSE_DELAY值不是0,则是delay一个介           REQUEST_RESPONSE_DELAY最大值和最小值之间的一个值再回复单播subscribe entry

  • 客户端收到单播offer service entry后回复单播subscribe entry

     此种情况不受REQUEST_RESPONSE_DELAY的影响


http://www.kler.cn/a/537107.html

相关文章:

  • Python调取本地MongoDB招投标数据库,并结合Ollama部署的DeepSeek-R1-8B模型来制作招投标垂直领域模型
  • 【大模型】DeepSeek与chatGPT的区别以及自身的优势
  • DeepSeek 模型发展脉络全解析
  • go并发和并行
  • 【重新认识C语言----文件管理篇】
  • 一、lambda表达式处理stream操作
  • 【大模型】DeepSeek与chatGPT的区别以及自身的优势
  • 软考教材重点内容 信息安全工程师 第15章 网络安全主动防御技术与应用
  • MySQL中datetime类型23:59:59变成下一天的00:00:00
  • 苍穹外卖-day12(工作台、数据导出)
  • 开箱即用的.NET MAUI组件库 V-Control 发布了!
  • 机器学习数学基础:17.矩阵初等变换
  • TCP/IP 邮件
  • Redis 深度解析 —— 高频面试题与核心知识点
  • Android设置个性化按钮按键的快捷启动应用
  • 2025.2.7
  • 多数据源配置及使用,在同一个方法下切换数据源。
  • 基于JUnit4和JUnit5配合例子讲解JUnit的两种运行方式
  • 笔记本电脑屏幕泛白问题解决详解(AMD显卡)
  • .NET 8 WebAPI文件下载包含断点续传和取消下载
  • STM32 CUBE Can调试
  • (11)gdb 笔记(4):设置执行方向 set exec-direction,
  • OpenCV:图像修复
  • RabbitMQ 从入门到精通:从工作模式到集群部署实战(四)
  • CSS 伪类(Pseudo-classes)的详细介绍
  • Java基础学习笔记-封装