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

SomeIP通讯机制

在SOME/IP协议中,通讯方式主要围绕服务的交互模式进行的设计,核心机制包括Event(时间)、Method(方法)以及其变种Fire-and-Forget(FF)。以下是SOME/IP中所有通信方式的总结:


Method(方法)

定义:客户端 调用 服务端 提供的功能或者服务,类似于远程过程调用(RPC)
通信模式:(分为两种子类型)

  • Request/Response(请求响应)

    -->客户端发送请求(Message Type: REQUEST (0x00)),服务端处理后返回响应(Message Type: RESPONSE (0x80))
    -->双向通信,适用于需要确认或返回结果的场景
    -->示例:查询车辆当前速度,客户端期待服务器返回具体数据

  • Fire-and-Forget(FF)(发送即忘)

    -->客户端发送请求(Message Type: REQUEST_NO_RETURN (0x01)),服务器执行操作但不返回响应。

    -->单向通信,客户端不等待结果
    -->示例:发送“打开车窗”命令,无需确认是否成功

       特点:由客户端主动发起


Event(事件)

定义:服务器主动向订阅了事件的客户端发送通知消息,通常用于数据更新或状态变化
通信模式:基于“发布/订阅(Publish/Subscribe)”模式

  • 客户端通过订阅某个事件组(Event Group)来接收事件

  • 服务器在触发条件满足时(例如值变化或按周期)推送数据

        消息类型:NOTIFICATION(0x02)

        特点:
                单向通信(服务器-->客户端)

                不需要客户端请求,由服务器主动推送

       示例:周期性推送发动机温度给所有订阅的客户端


Service Discovery(服务发现)

  • 定义:客户端通过服务发现机制找到可用服务并订阅事件或调用方法
  • 通信模式:基于特定的消息类型,如:SERVICE_OFFER、FIND_SERVICE 和 SUBSCRIBE/SUBSCRIBE_ACK
  • 特点:
    使用 UDP 多播进行动态服务发现。
    不直接传输业务数据,而是为 Method 和 Event 提供基础支持
  • 示例:客户端广播寻找支持“温度监控”服务的服务器

Field(字段)

  • 定义:Field 是一种特殊的服务类型,结合了 Method 和 Event 的特性,用于表示可读写的数据字段。
  • 子类型:
    • Getter:通过 Method 的 Request/Response 读取字段值。
    • Setter:通过 Method 的 Request/Response 或 FF 修改字段值。
    • Notifier:通过 Event 通知字段值的变化。
  • 特点:Field 本身不是独立的通信方式,而是对 Method 和 Event 的组合封装。

  • 示例:车辆油量作为一个 Field,客户端可通过 Getter 获取当前值,通过 Setter 修改值(如果允许),通过 Notifier 接收更新通知。


总结表

通信方式发起方通信方向消息类型典型场景
Method - Request/Response客户端双向(请求+响应)REQUEST (0x00), RESPONSE (0x80)查询数据、调用功能
Method - Fire-and-Forget客户端单向(仅请求)REQUEST_NO_RETURN (0x01)发送命令,无需确认
Event服务器单向(通知)NOTIFICATION (0x02)数据更新、状态广播
Field - Getter客户端双向REQUEST (0x00), RESPONSE (0x80)读取字段值
Field - Setter客户端双向或单向(FF)REQUEST (0x00) 或 REQUEST_NO_RETURN (0x01)修改字段值
Field - Notifier服务器单向NOTIFICATION (0x02)通知字段值变化

  • 核心通信方式:SOME/IP 的通信主要围绕 Method(包括 Request/Response 和 FF)和 Event 展开
  • Field 的特殊性:Field 是对 Method 和 Event 的封装,提供了更高层次的抽象,但底层依然基于这两者

  • 服务发现:虽然不直接传输业务数据,但它是 SOME/IP 动态通信的前提

综上,SOME/IP 的通信方式可以总结为 Method(Request/Response 和 FF)Event,以及基于这两者的衍生形式(如 Field)。


Event和Method总结

  • Event:服务器推送,客户端需先订阅。
  • Method:客户端发起,服务器响应(或不响应,取决于 FF)。

关键区别

  • 主动性:Event 的推送由服务器控制,Method 的调用由客户端控制。
  • 订阅 vs 调用:Event 需要订阅机制,Method 是直接调用,不涉及订阅

实际示例

对于event和method的综合应用,再举个实际例子:

Service ID = 613
Service Name = ExteriorMirrorSource :
ExteriorMirrorSource :: MirrorSourceFoldingStateEvent --> event 
ExteriorMirrorSource :: MirrorSourceAdjustmentEvent -->  event 
ExteriorMirrorSource :: setMirrorFoldUnfoldCmd --> method 
ExteriorMirrorSource :: setMirrorAdjustmentCmd --> method 
ExteriorMirrorSource :: setMirrorMetrixResetIOCtrl --> method 

对于这个服务,可以看到该服务下包含了2个event和3个method 这样的 功能单元 组成。

实际的应用中:

  • 当用户按下折叠后视镜的按钮时,客户端调用 setMirrorFoldUnfoldCmd,服务器执行折叠操作。
  • 操作完成后,服务器通过 MirrorSourceFoldingStateEvent 通知所有订阅者(如仪表盘)后视镜已折叠。
  • 类似地,调整后视镜时,客户端调用 setMirrorAdjustmentCmd,服务器调整镜面后通过 MirrorSourceAdjustmentEvent 通知新位置。

对于 Service ID = 613 的 ExteriorMirrorSource 服务:

  • Event(2 个):服务器主动推送后视镜的状态变化(折叠状态、调整状态),客户端需订阅以接收状态更新。

  • Method(3 个):客户端主动调用以控制后视镜(折叠/展开、调整角度、重置参数),服务器执行相应操作。

  • 理解方式:Event 是“状态反馈”,Method 是“功能调用”,两者共同构成了服务的完整功能。


这种设计在汽车网络(如 AUTOSAR)中非常常见,反映了状态监控和主动控制的双重需求。

相关文章:

  • B-tree 的原理源码分析及应用场景等
  • 决策树模型
  • 2025年CCF-C NCA:导航变量多目标粒子群算法NMOPSO,深度解析+性能实测
  • AI时代如何让命令行工具快速智能化?
  • 雷电多开器自动化运行、自动登录APP刷新日用户活跃量
  • MySQL JOIN详解:INNER JOIN与LEFT JOIN的选择与应用
  • 解锁深度学习激活函数
  • LangChain4j(7):Springboot集成LangChain4j实现知识库RAG
  • 杀戮尖塔(Slay The Spire) 的全新角色模组 - 女巫
  • 乐观锁与悲观锁的使用场景
  • updateById()、update()、lambdaUpdate()字段更新为null,失效的解决方案
  • 数据库的历史与发展
  • pyqtgraph.opengl.items.GLSurfacePlotItem.GLSurfacePlotItem 报了一个错
  • 头歌数据库【数据库概论】第10-11章 故障恢复与并发控制
  • 文件上传、读取与包含漏洞解析及防御实战
  • 原创工具scoopex - scoop增强工具,提供github proxy和url净化功能
  • C++ 蓝桥云课代码练习
  • 基于springboot钻孔数据管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 安装 Calico 的两种主流方式对比
  • 21 天 Python 计划:MySQL视图、触发器、存储过程、函数与流程控制
  • 有什么做3维的案例网站/关键词优化推广公司排名
  • 手机上怎么制作网站/如何让新网站被收录
  • php网站开发心得/优化网络推广外包
  • 怎么注册公司教程/域名查询seo
  • 网站建设开发人员配置/厦门关键词排名提升
  • 珠海 网页设计/站长网站seo查询