SOME/IP 详解系列(3)—— 通信方式

这篇具有很好参考价值的文章主要介绍了SOME/IP 详解系列(3)—— 通信方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

前面的文章给大家介绍了SOME/IP的功能、标准和报文格式,接下来我们开始介绍更多和实际应用相关的内容。首先,是通信方式。看看SOME/IP是如何通信的,节点之间是如何通过SOME/IP进行交互的。

通信方式

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

Method

Method有两种类型,Request/Response(RR)和Fire&Forget(FF),Request/Response即请求/响应,是最常见的,Client(客户端)发送请求,Server(服务器)回复响应,属于同步调用,对应的报文类型为0x00 REQUEST(报文类型在上篇文章中有介绍)和0x80 RESPONSE。Fire&Forget,可以直译成点火即忘,触发了但不在乎结果,Client发送请求,但不需要服务器的响应,属于异步调用,对应的报文类型为0x01 REQUEST_NO_RETURN,如下图。
someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/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即可。

Event

Event为事件类型,基于发布/订阅的机制,是当Client订阅了某个事件组后,在该事件发生时,Server发送通知给Client的通信方式,报文类型为0x02 NOTIFICATION,如下图。
someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/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
    变化超过阈值发送,当较上一次的变化超过预先设置的阈值时,进行发送。

Event 发送策略示例

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

场景1,Cyclic update

银行会定期给我们发送账单,比如信用卡账单,都是固定在每个月的某一天,叫做账单日。无论账户是否有变动,无论这个月的消费金额是多还是少,银行都会按照既定的周期发送账单。这就是Cyclic update,周期发送策略。
someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/ip,网络协议,网络

场景2,Update on change

如果设置了消费提醒服务(专业点叫储蓄/信用卡账户变动通知),每当账户发生变动时,比如消费、发工资后,就会收到一条通知信息,告诉我们账户变动的时间、对方账户和金额。这就是Update on change,发生变化后发送。
someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/ip,网络协议,网络

场景3,Epsilon change

如果设置的账户变动通知服务可以选择通知起点金额,那么每当账户发生变动时,只有变动金额超过起点金额,才会收到通知信息。比如设置的起点金额是500,当账户变化小于500时,不会有通知,只有金额大于500时才会通知。这就是Epsilon change,变化超过一定阈值时,才会发送。
someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/ip,网络协议,网络

场景4,Request/Response

为了更好地理解,我们继续举个请求/响应的例子,假如我们想主动查询下储蓄卡的余额或者信用卡的额度,通常会发送一条查询请求给银行,然后银行回复我们余额或者额度等信息,这一来一回就是Request/Response的通信方式。
someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/ip,网络协议,网络
以上四种,前三种都需要预先设置,可以类比为SOME/IP中需要预先通过SOME/IP SD进行订阅,而最后一种只需要在想获取信息的时候主动请求即可。

Field

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

  1. Setter
    通过Request/Response的方式来实现,Request中为空,不携带数据,Response返回Field的值。
  2. Getter
    通过Request/Response的方式来实现,Request携带想要将Field设置的值,Response返回Field设置好的值。
  3. Epsilon change
    通过Event的方式来实现,发送策略与Event一致,不同的是当第一次订阅成功后,Server会主动发送一次Notifier,携带当前Field的值,即订阅成功后,Client可以立刻获得Field的初始值,而不用等待事件触发。除此之外,相较于Evnet,Notifier更适合具有“属性”的值。举个例子,开门、碰撞、报警等瞬间发生的事件,一般可以定义成Event;而车速、温度、音量等即便没有事件触发,本身也有含义的内容,用Notifer会更加合适。
    someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/ip,网络协议,网络

今天就先分享到这,本文介绍了SOME/IP如何通信,下一篇文章将会继续介绍SOME/IP的数据类型和格式。

欢迎关注王师傅的微信公众号“汽车以太网”

someip在本机内如何交换数据,SOME/IP,车载以太网应用,tcp/ip,网络协议,网络文章来源地址https://www.toymoban.com/news/detail-856582.html

到了这里,关于SOME/IP 详解系列(3)—— 通信方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SOME/IP中间件通信流程

    本文根据文章《CAPL如何实现SOME/IP协议通信:SomeIP_IL.dll函数篇(超两万字详解)》内容,抽取总结出SOME/IP通信流程,正不正确的另说,目的是为了加深对SOME/IP中间件的理解。 首先,不管是消费方consumer,还是提供方provider,都有自己的someip中间件。本质上,它是一个程序,作

    2024年02月06日
    浏览(64)
  • (三) 搞定SOME/IP通信之CommonAPI库

    本章主要介绍在SOME/IP通信过程中的另外一个IPC通信利剑,CommonAPI库,文章将从如下几个角度让读者了解什么是CommonAPI, 以及库在实际工作中的作用 文中资源:vsomeip+commonapi+指导文档与demo源码 CommonAPI是GENIVI组织开发的一个基于C++的应用API库,没错,跟vsomeip协议栈是一个爹。其

    2024年02月08日
    浏览(30)
  • 玩转Angular系列:组件间各种通信方式详解

    在前端框架Angular中,组件之间的通信很基础也很重要,不同组件间的通信方式也不同,掌握组件间的通信方式会更加深刻的理解和使用Angular框架。 本文讲解不同类型组件间的不同通信方式,文中所有示例均提供源码,您可以 在线编辑预览 或 下载本地调试 ,相信通过本文您

    2024年01月20日
    浏览(32)
  • SOME/IP协议详解[7 SOME/IP序列化]

    什么是序列化与反序列化? 序列化是指将数据结构或对象按定义的规则转换成二进制串的过程。 反序列化是指将二进制串依据相同规则重新构建成数据结构或对象的过程。 而本质就是一种编码规范。 在SOME/IP中使用序列化的目的和作用? 使数据按照固定格式进行编排成为字

    2024年02月15日
    浏览(24)
  • SOME/IP协议详解[6 SOME/IP-TP]

    我们知道CAN-TP是用来对当总线CAN数据过大时,就需要对CAN整包数据进行分割拆包进行发送,这个时候发送方的TP层就起作用,同理对于接收方而言,也需要将分割的数据包进行组包完成整包数据的重组还原。 因此,举一反三,我们便可以知道SOME/IP-TP模块的主体功能就是为了实

    2024年01月19日
    浏览(26)
  • Python获取本机IP地址的三种方式

    目录 1、使用专用网址 2、使用自带socket库 3、使用第三方netifaces库 获取的是 公网IP 。 网址:http://myip.ipip.net 代码: 具体可以类似这样:  比较喜欢用这个,在命令窗口也能使用: 还可以用这个: https://api.ipify.org 获取的是 局域网IP 。 但是上面这个获取的 不是 公网IP,结果

    2024年02月04日
    浏览(32)
  • <c++开发>通信工具 -之-SOME/IP移植部署 第一篇文章

    SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是一种通信协议,主要用于嵌入式系统和车载网络中的服务导向通信。SOME/IP是AUTOSAR(AUTomotive Open System ARchitecture,汽车开放系统架构)标准的一部分,AUTOSAR是由主要汽车制造商和供应商共同制定的开放式汽车电子架构标准。 SOME/IP协

    2024年02月11日
    浏览(75)
  • SOME/IP协议详解「总目录」

    欢迎大家来到雪云飞星的《SOME/IP协议详解》,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习SOME/IP协议知识点的参考。下面蓝字都是传送门,点击进入即可: SOME/IP协议详解「总目录」 SOME/IP协议详解「前言」 SOME/IP协议详解「1.0·概述」 SOME/IP协议详解「

    2023年04月09日
    浏览(23)
  • gRPC ZeroMQ (ZMQ) D-Bus SOME/IP 通讯方式的比较

    特性/框架 gRPC ZeroMQ (ZMQ) D-Bus SOME/IP 通信模式 基于 HTTP/2,支持流控制 消息队列,不需要中心协调器 消息总线系统,适用于内部进程通信 专为车载网络设计的服务和消息传递 使用场景 分布式系统,微服务架构 高性能,分布式或并行计算环境 桌面环境,应用间通信 车载网络

    2024年01月18日
    浏览(29)
  • JavaScript 如何获取本机IP地址

    获取本机IP地址是前端工程师经常需要处理的问题。JavaScript 有几种方法可以获取客户端的IP地址。下面是三种获取本机IP的方法。 方法1:使用第三方 API 一种获取客户端IP地址的最简单方法是使用第三方API。可以使用一些免费API,例如ipify.org等来获取IP地址。下面的代码片段展

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包