SOME/IP中”客户端消费“及”服务端提供”的解析

news2025/4/21 3:03:40

先上结论

AREthAddConsumedEventGroup-->客户端的函数-->谁调用 Consumed函数,谁就是消费者

AREthAddProvidedEventGroup-->服务端的函数-->谁调用 Provided函数,谁就是服务端


Server 端:AREthAddProvidedEventGroup → 声明 "我能提供这些事件"。

Client 端:AREthAddConsumedEventGroup → 声明 "我要订阅这些事件"。

只有两者匹配,SOME/IP 事件订阅才能正常工作。

代码应用展示,参考:SomeIP:服务端or客户端发送event或method源码参考via CAPL-CSDN博客



示例:车窗升降控制

1. 角色定义

  • 服务端(Server):
    实际控制硬件的节点(比如车门控制模块 ECU),它实现了车窗升降的具体功能(如驱动电机、检测车窗位置等)。

    • 它提供(Provided) "车窗控制服务"(包含方法调用、事件通知等)。

  • 客户端(Client):
    发起请求或接收状态的节点(比如中控屏或车身控制器),它需要使用(Consumed)车窗服务,但不直接控制硬件。

    • 它消费(Consumed) Server 提供的服务(例如:发送升降指令、接收车窗状态事件)。


2. 具体交互场景

场景 1:客户端控制车窗升降(方法调用)

  1. 客户端(中控屏):

    • 用户点击“升窗”按钮 → 客户端调用 RPC方法(如 WindowControl_MoveUp())。

    • 这个方法的实现在服务端,客户端只是调用(消费)它。

  2. 服务端(车门ECU):

    • 收到请求后,执行硬件操作(如启动电机升窗)。

    • 返回执行结果(SUCCESS 或 FAILED)给客户端。


场景 2:服务端主动通知车窗状态(事件订阅)

  1. 服务端(车门ECU):

    • 实时监测车窗位置(如 0%~100%)。

    • 通过 AREthAddProvidedEventGroup() 声明支持 "车窗位置事件"。

    • 当位置变化时,主动推送事件(如 WindowPosition_Event(75%))。

  2. 客户端(仪表盘):

    • 调用 AREthAddConsumedEventGroup() 订阅 "车窗位置事件"。

    • 收到事件后更新UI(如显示车窗位置进度条)。


3. 服务端实现,客户端使用

  • 服务端(Server):

    • 拥有硬件控制权(如电机、传感器)。

    • 实现服务逻辑(如 WindowControl_MoveUp() 的具体代码)。

    • 决定数据何时发送(如车窗位置变化时触发事件)。

  • 客户端(Client):

    • 无权直接操作硬件,只能通过调用服务端的接口。

    • 依赖服务端的数据(如订阅事件获取车窗状态)。

    • 如果服务端未提供某个功能,客户端无法自行实现。


4. 关键区别:控制权与依赖关系


5.示例小结

  • 服务端(车门ECU):

    • 控制车窗升降(实际驱动电机)。

    • 提供 WindowControl 服务(包含方法、事件)。

  • 客户端(中控屏):

    • 调用升降方法(如 MoveUp()),但不直接控制电机。

    • 接收车窗状态事件(如 Position_Event),但不主动读取传感器。


总结

  • 服务端(Provided) = "我有能力,你来找我"
    (实现功能、控制硬件、主动推送数据)。

  • 客户端(Consumed) = "我需要能力,但我依赖你"
    (请求功能、接收数据,但无直接控制权)

这种设计保证了:

  1. 硬件安全(只有服务端能直接操作硬件)。

  2. 职责分离(客户端只关注交互,服务端专注控制)。

  3. 灵活性(多个客户端可共享同一服务端的功能)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 深入浅出信号量:从线程到进程的同步与互斥实战指南

知识点1【信号量概述】 信号量是广泛用于进程和线程间的同步和互斥。信号量的本质 是一个非负的整数计数器,它被用来控制对公共资源的访问 当信号量值大于0的时候,可以访问,否则将阻塞。 PV原语对信号量的操作,一次P操作使信号…

Oracle数据库数据编程SQL<9.1 数据库逻辑备份和迁移exp和imp之导出、导入>

EXP (Export) 和 IMP (Import) 是 Oracle 提供的传统数据导出导入工具,用于数据库逻辑备份和迁移。尽管在较新版本中已被 Data Pump (EXPDP/IMPDP) 取代,但在某些场景下仍然有用。 目录 一、EXP 导出工具 1. 基本语法 2. 常用参数说明 3. 导出模式 3.1 表模式导出 3.2 用…

DotnetCore开源库SampleAdmin源码编译

1.报错: System.Net.Sockets.SocketException HResult0x80004005 Message由于目标计算机积极拒绝,无法连接。 SourceSystem.Net.Sockets StackTrace: 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, C…

.Net 9 webapi使用Docker部署到Linux

参考文章连接: https://www.cnblogs.com/kong-ming/p/16278109.html .Net 6.0 WebApi 使用Docker部署到Linux系统CentOS 7 - 长白山 - 博客园 项目需要跨平台部署,所以就研究了一下菜鸟如何入门Net跨平台部署,演示使用的是Net 9 webAPi Li…

PyTorch 根据官网命令行无法安装 GPU 版本 解决办法

最近遇到一个问题,PyTorch 官网给出了 GPU 版本的安装命令,但安装成功后查看版本,仍然是 torch 2.6.0cpu 1. 清理现有 PyTorch 安装 经过探索发现,需要同时卸载 conda 和 pip 安装的 torch。 conda remove pytorch torchvision …

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全 资源宝整理分享&#xff1a;https://www.htple.net PHP防火墙&#xff08;作者&#xff1a;悠悠楠杉&#xff09; 验证测试&#xff0c;链接后面加上?verify_cs1后可以自行测试 <?php //复制保存zzwaf.php$we…

使用 Vitis Model Composer 生成 FPGA IP 核

本文将逐步介绍如何使用 Vitis Model Composer 生成 FPGA IP 核&#xff0c;从建模到部署。 在当今快节奏的世界里&#xff0c;技术正以前所未有的速度发展&#xff0c;FPGA 设计也不例外。高级工具层出不穷&#xff0c;加速着开发进程。传统上&#xff0c;FPGA 设计需要使用硬…

BERT、T5、ViT 和 GPT-3 架构概述及代表性应用

BERT、T5、ViT 和 GPT-3 架构概述 1. BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09; 架构特点 基于 Transformer 编码器&#xff1a;BERT 使用多层双向 Transformer 编码器&#xff0c;能够同时捕捉输入序列中每个词的左右上下文信息…

倚光科技:以创新之光,雕琢全球领先光学设计公司

在光学技术飞速发展的当下&#xff0c;每一次突破都可能为众多领域带来变革性的影响。而倚光&#xff08;深圳&#xff09;科技有限公司&#xff0c;作为光学设计公司的一颗璀璨之星&#xff0c;正以其卓越的创新能力和深厚的技术底蕴&#xff0c;引领着光学设计行业的发展潮流…

数据结构(六)——红黑树及模拟实现

目录 前言 红黑树的概念及性质 红黑树的效率 红黑树的结构 红黑树的插入 变色不旋转 单旋变色 双旋变色 插入代码如下所示&#xff1a; 红黑树的查找 红黑树的验证 红黑树代码如下所示&#xff1a; 小结 前言 在前面的文章我们介绍了AVL这一棵完全二叉搜索树&…

解决 Vue 中 input 输入框被赋值后,无法再修改和编辑的问题

目录 需求&#xff1a; 出现 BUG&#xff1a; Bug 代码复现 解决问题&#xff1a; 解决方法1&#xff1a; 解决方法2 关于 $set() 的补充&#xff1a; 需求&#xff1a; 前段时间&#xff0c;接到了一个需求&#xff1a;在选择框中选中某个下拉菜单时&#xff0c;对应的…

【差分隐私相关概念】瑞丽差分隐私(RDP)-瑞丽散度约束了贝叶斯因子后验变化

分步解释和答案&#xff1a; 在Rnyi差分隐私&#xff08;RDP&#xff09;框架中&#xff0c;通过贝叶斯因子和Rnyi散度的关系可以推导出关于后验变化的概率保证。以下是关键步骤的详细解释&#xff1a; 1. 贝叶斯因子的定义与分解 设相邻数据集 D D D 和 D ′ D D′&#x…

前端快速入门——JavaScript函数、DOM

1.JavaScript函数 函数是一段可重复使用的代码块&#xff0c;它接受输入(参数)、执行特定任务&#xff0c;并返回输出。 <scricpt>function add(a,b){return ab;}let cadd(5,10);console.log(c); </script>2.JavaScript事件 JavaScript绑定事件的方法&#xff1…

10【模块学习】LCD1602(二):6路温度显示+实时时钟

项目&#xff1a;6路温度显示实时时钟 1、6路温度显示①TempMenu.c文件的代码②TempMenu.h文件的代码③main.c文件的代码④Timer.c文件的代码⑤Delay.c文件的代码⑥Key.c文件的代码 2、实时时钟显示①BeiJingTime.c文件的代码②BeiJingTime.h文件的代码③main.c文件的代码如下④…

PDF处理控件Aspose.PDF指南:使用 C# 从 PDF 文档中删除页面

需要从 PDF 文档中删除特定页面&#xff1f;本快速指南将向您展示如何仅用几行代码删除不需要的页面。无论您是清理报告、跳过空白页&#xff0c;还是在共享前自定义文档&#xff0c;C# 都能让 PDF 操作变得简单高效。学习如何以编程方式从 PDF 文档中选择和删除特定页面&#…

如何在不同版本的 Elasticsearch 之间以及集群之间迁移数据

作者&#xff1a;来自 Elastic Kofi Bartlett 当你想要升级一个 Elasticsearch 集群时&#xff0c;有时候创建一个新的独立集群并将数据从旧集群迁移到新集群会更容易一些。这让用户能够在不冒任何停机或数据丢失风险的情况下&#xff0c;在新集群上使用所有应用程序测试其所有…

Day08【基于预训练模型分词器实现交互型文本匹配】

基于预训练模型分词器实现交互型文本匹配 目标数据准备参数配置数据处理模型构建主程序测试与评估总结 目标 本文基于预训练模型bert分词器BertTokenizer&#xff0c;将输入的文本以文本对的形式&#xff0c;送入到分词器中得到文本对的词嵌入向量&#xff0c;之后经过若干网络…

npm和npx的作用和区别

npx 和 npm 是 Node.js 生态系统中两个常用的工具&#xff0c;它们有不同的作用和使用场景。 1. npm&#xff08;Node Package Manager&#xff09; 作用&#xff1a; npm 是 Node.js 的包管理工具&#xff0c;主要用于&#xff1a; 安装、卸载、更新项目依赖&#xff08;包&a…

C++学习之金融类安全传输平台项目git

目录 1.知识点概述 2.版本控制工具作用 3.git和SVN 4.git介绍 5.git安装 6.工作区 暂存区 版本库概念 7.本地文件添加到暂存区和提交到版本库 8.文件的修改和还原 9.查看提交的历史版本信息 10.版本差异比较 11.删除文件 12.本地版本管理设置忽略目录 13.远程git仓…

CCF CSP 第36次(2024.12)(1_移动_C++)

CCF CSP 第36次&#xff08;2024.12&#xff09;&#xff08;1_移动_C&#xff09; 解题思路&#xff1a;思路一&#xff1a; 代码实现代码实现&#xff08;思路一&#xff09;&#xff1a; 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 原题链接 解题思路&…