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

车载以太网之要火系列 - 第47篇:郭大侠学SOME/IP (Find Service):主动通知未收好,自己寻问自己找

写在开篇·蓉儿继续挖坑

上回说到,郭靖搞清楚了Offer Service——服务端上电后主动广播“我会啥,我在这”。

郭靖合上笔记本,信心满满:“蓉儿,我懂了!服务端上电就喊话,客户端等着收就行了。”

黄蓉咬了口糖葫芦:“那好,我问你——如果座舱启动晚了,没听到车窗服务的Offer,怎么办?”

郭靖一愣:“这……等下一波?”

黄蓉:“下一波要等1.5秒(重复期)甚至3秒(稳定期)。座舱等得起吗?”

郭靖摇头。

这就是Find Service的用武之地。今天就把Find Service讲透——主动通知未收到,自己寻问自己要。

一、Find Service是什么

黄蓉在白板上写下定义:

Find Service = 客户端主动广播“谁提供XX服务?请告诉我”

角色动作说明
客户端(如座舱)广播Find“谁有0x0300(车窗控制服务)?请告诉我”
服务端(如车窗ECU)单播Offer“我有,我在192.168.1.100”

Find是客户端的‘主动寻问’。等不到Offer,就自己喊一嗓子。”

二、什么时候用Find

黄蓉画了一张场景对比表:

场景OfferFind
服务端先启动,客户端后启动✅ 客户端能收到❌ 不需要
客户端先启动,服务端后启动❌ 客户端没收到✅ 客户端主动问
网络丢包,Offer丢失❌ 客户端没收到✅ 客户端主动问
客户端想刷新服务列表✅ 主动问一下
服务端稳定期(3秒才发一次)可能要等3秒✅ 立即问,不用等

Find的核心理念:不等了,我自己问。

三、一个完整的Find报文示例

黄蓉调出一个座舱寻找车窗服务的完整报文(按字段分组):

FF FF | 81 00 | 00 00 00 14 | 12 34 | 00 05 | 01 | 01 | 02 | 00 | 01 | 01 | 00 00 | 00 08 | 03 00 | 00 00 | 00 00 00 00

第一步:SOME/IP头部(12字节)

分组说明
Service IDFF FFSD专用固定ID
Method ID81 00SD专用固定Method ID
Length00 00 00 1420字节
Client ID12 34座舱的ID
Session ID00 05第5次请求
Message Type02NOTIFICATION

“看到FF FF 81 00,还是SD消息。”

第二步:SD头部(4字节)

分组说明
Version01SD版本1
Message Type01Find Service(注意:Offer是02,Find是01)
Reserved00 00保留
Entry Count00 00 00 01有1个Entry

第三步:Find Entry

分组说明
Entry Type00 00Find Service(Offer是00 01)
Length00 088字节
Service ID03 00要找的车窗控制服务
Instance ID00 000x0000表示“找这个服务的所有实例”
TTL00 00 00 00Find消息不需要TTL,全0

郭靖注意到Instance ID是00 00:“为什么不是00 01(左前窗)?”

黄蓉:“Instance ID=0x0000是通配符,意思是‘找这个服务的所有实例’。座舱不关心是左前还是右前,谁回都行。”

四、服务端收到Find后做什么

黄蓉画了车窗ECU收到Find后的处理流程:

车窗ECU收到Find报文: │ ├── 解析出要找的服务:Service ID=0x0300 │ ├── 检查自己有没有这个服务 → 有! │ ├── 单播回复Offer给座舱(不是广播) │ └── Offer报文内容: Service ID=0x0300,Instance ID=0x0001 IP=192.168.1.100,Port=30490,TTL=3

关键区别:Find的响应是单播,不是广播。谁问的,就单独回给谁,不打扰其他人。”

五、Find vs Offer 对比

黄蓉画了一张对比表:

对比项OfferFind
谁发起服务端客户端
触发时机上电后、续约时需要服务时、等不到Offer时
发送方式广播(告诉所有人)广播(问所有人)
响应方式无响应(单向广播)单播Offer(谁问回谁)
Entry Type0x00010x0000
Instance ID具体实例(如0x0001)通配符(0x0000)或具体值
TTL有效期(如3秒)全0(不需要)

郭靖恍然大悟:“哦~~Offer是‘我来了,你们都知道一下’,Find是‘谁在?过来回我一下’。”

六、Find的典型使用场景

黄蓉画了一个时序图,展示Offer和Find如何配合:

车窗ECU(服务端) 座舱(客户端) │ │ │ ① 车窗ECU上电,发Offer(广播) │ │ “我会0x0300,我在192.168.1.100” │ │─────────────────────────────────────>│(座舱没收到,因为还没启动) │ │ │ │ ② 座舱上电 │ │ │ │ ③ 座舱等了一会儿,没收到Offer │ │ │ ④ 座舱发Find(广播) │ │ “谁有0x0300?” │ │<─────────────────────────────────────│ │ │ │ ⑤ 车窗ECU单播Offer │ │ “我有,我在192.168.1.100” │ │─────────────────────────────────────>│ │ │ │ │ ⑥ 座舱记下服务地址

Offer + Find 双保险,确保客户端总能找到服务。

七、黄蓉的小本本

郭靖翻开她的笔记本,上面写着:

Find Service核心要点:

1. 客户端主动问:等不到Offer,就自己喊“谁有XX服务?”

2. 什么时候用:客户端启动晚、网络丢包、想刷新服务列表

3. Entry Type0x0000(Find Service)

4. Instance ID通配符0x0000表示“找所有实例”

5. 响应方式:服务端单播Offer给询问的客户端

6. 与Offer配合:Offer + Find = 双保险

一句口诀:主动通知未收好,自己寻问自己找

写在最后

郭靖合上笔记本:“Find是客户端主动问‘谁会啥’。服务端收到后,单播回复Offer。Offer和Find配合,客户端总能找到服务,不管谁先启动。”

黄蓉咬了口糖葫芦:“知道了服务端怎么喊、客户端怎么问。那如果想收通知(Event/Field Notifier),怎么订阅?”

郭靖摇头。

下篇预告:想收通知要订阅,EventGroup来帮忙——Subscribe详解。

打完收工,886。

http://www.cnnetsun.cn/news/2424125.html

相关文章:

  • GitHub中文界面3分钟终极汉化指南:告别语言障碍的开发者神器
  • 程序化关卡生成:DungeonTemplateLibrary核心算法与游戏集成实战
  • 深入Python底层:字节码与内存管理揭秘
  • 交叉熵与最大似然的数学等价性,概率论在机器学习中的应用(附实战代码)
  • DIY智能电机推子:从闭环控制到MIDI交互的硬件实战
  • Subconscious:构建团队集体记忆中枢,破解代码协作中的隐性知识管理难题
  • Adafruit心愿单与报价单:硬件项目物料管理与采购协作全攻略
  • API文档协作中心构建指南:从工程化实践到团队效能提升
  • 极限竞速:地平线6 顶级版 2026最新破解版加修改器免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
  • 泰拉瑞亚风灵月影修改器下载分享2026最新版(增强工具使用指南)
  • AI-Git-Narrator:用大语言模型自动生成Git项目演进报告
  • Go语言构建轻量级API网关:clawgate核心架构与实战指南
  • 基于ESP32-S3与ADXL345的拳击训练物联网追踪器开发实战
  • 开源信号处理框架OpenClaw:模块化设计与自定义算法集成实战
  • openpisci嵌入式框架:从硬件抽象到驱动开发实践
  • WinDirStat:Windows磁盘空间管理神器,让存储问题无处遁形
  • 基于Discord与OpenClaw构建语音控制自动化系统
  • 1999-2025年上市公司内部薪酬差距数据
  • 告别VS!用VSCode + MinGW搭建轻量级C++开发环境(附完整配置流程)
  • 备战蓝桥杯国赛【Day 14】
  • Next.js全栈开发实战:基于ace-next-ts模板构建现代化Web应用
  • OBS WebSocket 5.x 终极配置指南:快速实现远程控制与自动化直播
  • gRPC 负载均衡详解:从原理到最佳实践
  • Android性能优化:Streamline工具深度解析与应用
  • Midjourney Ash印相参数白皮书(含Adobe RGB/ProPhoto RGB双色域适配矩阵及ICC Profile嵌入规范)
  • 从Claw框架迁移到现代技术栈:自动化工具链设计与工程实践
  • 如何一键智能激活Windows和Office:KMS_VL_ALL_AIO终极指南
  • Draft:云原生开发加速器,实现Kubernetes应用“保存即部署”
  • 从ZZULIOJ 1127题出发,手把手教你用C语言实现矩阵乘法(附完整代码与调试技巧)
  • OpenClaw自动化框架实战:从Web交互到数据抓取的工作流构建