SOME/IP 详解 —— 通信方式

admin 2024年2月10日00:51:20评论7 views字数 2451阅读8分10秒阅读模式

在SOME/IP中,一共有三种通信方式,分别是Method、Event和Field。

01

Method

Method有两种类型,Request/Response(RR)和Fire&Forget(FF),Request/Response即请求/响应,是最常见的,Client(客户端)发送请求,Server(服务器)回复响应,属于同步调用,对应的报文类型为0x00 REQUEST(报文类型在上篇文章中有介绍)和0x80 RESPONSE。Fire&Forget,可以直译成点火即忘,触发了但不在乎结果,Client发送请求,但不需要服务器的响应,属于异步调用,对应的报文类型为0x01 REQUEST_NO_RETURN,如下图。

SOME/IP 详解 —— 通信方式

当需要等待Server响应时,比如需要Server中的某些数据、信息,或者需要获取请求的执行结果等,都可以使用Request/Response,意味着发出请求后,需要等待响应。而当只需要将请求发送到Server,而不需要对方的响应时,可以使用Fire&Forget,发送请求后,可继续执行下面的操作,无需等待响应。相比较而言,Request/Response的可靠性和数据一致性更高,因为请求和响应是一一对应的,如果发现响应错误或超时,可以采取一些处理措施。而Fire&Forget的优势则在于可以节省时间和资源,同时无需等待也可以提高系统的响应速度。在实际设计中,需要根据具体的功能需求和系统性能来选择合适的Method类型。

个例子,【场景一】Client想获取Server端的网络配置信息,【场景二】Client想将自己的错误日志发送给Server,这两个场景中,【场景一】可以使用Request/Response,因为需要Server返回信息,当Server接收到请求后,可以通过响应来传输。而【场景二】可以使用Fire&Forget,对于Client来说,只需要把错误日志发送给Server即可。

02

Event

Event为事件类型,基于发布/订阅的机制,是当Client订阅了某个事件组后,在该事件发生时,Server发送通知给Client的通信方式,报文类型为0x02 NOTIFICATION,如下图。

SOME/IP 详解 —— 通信方式

图中Event报文上方还有两个SD报文,SD是服务发现Service Discovery,也是SOME/IP的一个模块,Event类型通信的前提是通过SOME/IP SD进行发布和订阅,SD会在后面的文章中详细介绍,本文主要介绍用于数据传输的SOME/IP协议。在SOME/IP中,定义了三种通知发送的策略:

1. Cyclic update

周期发送,以一定的周期发送通知。

2. Update on change

变化后发送,当该事件发生变化时,进行发送。

3. Epsilon change

变化超过阈值发送,当较上一次的变化超过预先设置的阈值时,进行发送。

举个例子

大家都会用银行卡,无论是储蓄卡还是信用卡,都有消费提醒和余额或者额度查询的服务。

场景1,Cyclic update

银行会定期给我们发送账单,比如信用卡账单,都是固定在每个月的某一天,叫做账单日。无论账户是否有变动,无论这个月的消费金额是多还是少,银行都会按照既定的周期发送账单。这就是Cyclic update,周期发送策略。

SOME/IP 详解 —— 通信方式

场景2,Update on change

如果设置了消费提醒服务(专业点叫储蓄/信用卡账户变动通知),每当账户发生变动时,比如消费、发工资后,就会收到一条通知信息,告诉我们账户变动的时间、对方账户和金额。这就是Update on change,发生变化后发送。

SOME/IP 详解 —— 通信方式

场景3,Epsilon change

如果设置的账户变动通知服务可以选择通知起点金额,那么每当账户发生变动时,只有变动金额超过起点金额,才会收到通知信息。比如设置的起点金额是500,当账户变化小于500时,不会有通知,只有金额大于500时才会通知。这就是Epsilon change,变化超过一定阈值时,才会发送。

SOME/IP 详解 —— 通信方式

场景4,Request/Response

为了更好地理解,我们继续举个请求/响应的例子,假如我们想主动查询下储蓄卡的余额或者信用卡的额度,通常会发送一条查询请求给银行,然后银行回复我们余额或者额度等信息,这一来一回就是Request/Response的通信方式。

SOME/IP 详解 —— 通信方式

以上四种,前三种都需要预先设置,可以类比为SOME/IP中需要预先通过SOME/IP SD进行订阅,而最后一种只需要在想获取信息的时候主动请求即可。

03

Field

最后一种通信方式叫Field,可以用来表示具体的“属性”,比如状态、模式或者数值等。Field是一个合集,里面包含了Getter、Setter和Notifier三种方式,Client可以用Getter去主动获取,可以用Setter去设置,也支持当满足一定触发条件时,Server主动发出通知,即Notifer。定义Filed时,可以选择只包含Getter、Setter还是Notifer,或者包含其中两个以及全部。

Getter

通过Request/Response的方式来实现,Request中为空,不携带数据,Response返回Field的值。

Setter

通过Request/Response的方式来实现,Request携带想要将Field设置的值,Response返回Field设置好的值。

Notifier

通过Event的方式来实现,发送策略与Event一致,不同的是当第一次订阅成功后,Server会主动发送一次Notifier,携带当前Field的值,即订阅成功后,Client可以立刻获得Field的初始值,而不用等待事件触发。除此之外,相较于Evnet,Notifier更适合具有“属性”的值。举个例子,开门、碰撞、报警等瞬间发生的事件,一般可以定义成Event;而车速、温度、音量等即便没有事件触发,本身也有含义的内容,用Notifer会更加合适。

SOME/IP 详解 —— 通信方式

原文始发于微信公众号(谈思实验室):SOME/IP 详解 —— 通信方式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月10日00:51:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SOME/IP 详解 —— 通信方式https://cn-sec.com/archives/2485297.html

发表评论

匿名网友 填写信息