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

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

先上结论

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. 灵活性(多个客户端可共享同一服务端的功能)

相关文章:

  • MCP 集合网站
  • Kotlin集合操作陷阱与突围:如何优雅地边遍历边修改MutableList
  • TestNG 单元测试详解
  • Spring Boot循环依赖全解析:原理、解决方案与最佳实践
  • DDS波形发生器仿真及技术原理
  • rabbitmq引入C++详细步骤
  • Go之Slice和数组:深入理解底层设计与最佳实践
  • 边缘计算场景下的模型轻量化:TensorRT部署YOLOv7的端到端优化指南
  • 云原生周刊:K8s 中的 GPU 共享
  • 【Pandas】pandas DataFrame iterrows
  • WPF 中的元素继承层次结构 ,以下是对图中内容的详细说明:
  • 若依RBAC权限控制SpringSecurity(自用)
  • WPF GDI 画 晶圆Mapping图
  • CSS 美化页面(三)
  • MegaTTS3: 下一代高效语音合成技术,重塑AI语音的自然与个性化
  • 浏览器运行Pytorch无法启用显卡
  • poll为什么使用poll_list链表结构而不是数组 - 深入内核源码分析
  • Java文件批量复制工具实现解析
  • 【npm install 一直转圈的问题】
  • 力扣HOT100——560.和为k的子数组
  • 排除燃气爆炸、人为放火可能,辽宁辽阳火灾事故起火原因正在调查
  • 王毅会见俄罗斯外长拉夫罗夫
  • 深圳宝安区一宗涉宅用地中止出让,起始总价86.27亿元
  • 找化学的答案,解人类的命题:巴斯夫的“变革者”成长之道
  • 国家发展改革委:我们对实现今年经济社会发展目标任务充满信心
  • 深一度|“凑合过”的利物浦,英超第二冠只求性价比