System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及数据读取,特别是涉及一种基于共享内存的服务发现方法和ecu。
技术介绍
1、随着汽车智能化的普及,汽车上的数据量越来越庞大和复杂,汽车上的数据存储和通信技术多种多样。需要实现一种车辆数据库,用于数据采集,收集和存储来自各种数据源的数据,以便提供给类似大数据应用进行后续数据分析。目前普遍的存储方式是将数据存储到磁盘文件中,数据的处理速度(读取和存储)较慢,并且占用较多的数据空间。而且部分车辆数据的有效期仅仅是在应用活动的阶段,并不需要一直存储数据,数据的有效期应该与应用的生命周期相绑定。另一方面,应用间会进行数据交换,通过读写文件的方式效率低,并且消耗资源,而车辆数据对于延时又有很高的要求,往往造成数据延误。
2、共享内存作为数据存储的一种方式,其较网络、文件等其他方式的读写速度更快。因此共享内存在汽车电子控制单元(electronic control unit,ecu)上的使用也越来越普及。由于共享内存本身不具备连接功能,如何让数据的写者应用和读者应用相互发现对方成为共享内存使用中的一个难点。目前传统做法是通过配置文件提前告知对方的连接信息,比如ip地址,连接的共享内存的文件名称等。但是如果存在大量的读者应用和写者应用,采用以上配置文件告知的方式需要大量的配置工作,完成配置大量的信息。这就造成“牵一发而动全身”的局面。例如,如果写者应用改变某个数据的存储位置,所有与该数据存储位置相关的配置文件都需要进行相应的更改,以通知给相关的读者应用。
3、由此可见,在使用共享内存作为数据存储方式的场景中,目
技术实现思路
1、基于上述问题,本申请提供了一种基于共享内存的服务发现方法和ecu,目的是通过服务发现机制,使读者应用和写者应用能够动态发现对方并与共享内存建立连接,实现动态的数据读写存储功能。
2、本申请实施例公开了如下技术方案:
3、本申请第一方面提供了一种基于共享内存的服务发现方法,该方法包括:
4、第一写者应用根据第一读者应用发送的第一服务发现报文,解析得到所述第一读者应用订阅的目标数据主题;所述第一写者应用在自身的服务发现网关模块预先注册了自身作为数据提供方的数据主题;
5、若所述第一写者应用从所述服务发现网关模块中查询确定自身为所述目标数据主题的数据提供方,则在所述服务发现网关模块中记录所述第一读者应用为所述目标数据主题的数据订阅方;
6、所述第一写者应用向所述第一读者应用发送第一服务发现响应报文;所述第一服务发现响应报文携带所述第一写者应用连接的共享内存的信息,所述共享内存中创建有所述目标数据主题对应的内存区域,所述内存区域用于存储所述目标数据主题的数据;所述共享内存的信息用于所述第一读者应用连接至所述共享内存;
7、所述第一写者应用通过所述共享内存向所述第一读者应用提供所述内存区域中的数据。
8、在可选实现方式中,所述第一服务发现响应报文还携带所述第一写者应用的进程信息,所述方法还包括:
9、所述第一写者应用根据所述第一读者应用发送的第一服务发现报文,解析得到所述第一读者应用的进程信息;
10、在所述第一写者应用向所述第一读者应用发送第一服务发现响应报文之后,所述方法还包括:
11、所述第一写者应用根据所述第一写者应用的进程信息和所述第一读者应用的进程信息,与所述第一读者应用建立第一通知内存;
12、所述第一写者应用在所述第一读者应用连接所述共享内存后,向所述内存区域写入数据;
13、所述第一写者应用通过所述共享内存向所述第一读者应用提供所述内存区域中的数据,具体包括:
14、所述第一写者应用通过所述第一通知内存,向所述第一读者应用通知所述第一写者应用向所述内存区域写入的数据在所述共享内存中的数据地址;所述数据地址指向所述第一写者应用向所述内存区域写入的数据,所述数据地址用于所述第一读者应用从所述内存区域读取所述第一写者应用写入的数据。
15、在可选实现方式中,所述第一通知内存包括内存信号量和通知队列,所述通知队列的数量为n,所述n为所述第一写者应用作为数据提供方且所述第一读者应用作为数据订阅方的数据主题的总数量;所述第一通知内存中的n个通知队列与数据主题具有一对一的关系;
16、所述第一写者应用通过所述第一通知内存,向所述第一读者应用通知所述第一写者应用向所述内存区域写入的数据在所述共享内存中的数据地址,具体包括:
17、所述第一写者应用将写入的数据在所述共享内存中的数据地址,推送到所述n个通知队列之中所述目标数据主题对应的目标通知队列中;
18、所述第一写者应用调用所述内存信号量,以唤醒所述第一读者应用从所述目标通知队列中获取所述数据地址。
19、在可选实现方式中,所述目标数据主题对应的内存区域为所述第一写者应用通过以下步骤申请创建:
20、若所述共享内存的内存锁为释放状态,所述第一写者应用占用所述内存锁,向所述共享内存的数据区申请分配所述目标数据主题对应的内存区域;
21、若所述内存锁为占用状态,所述第一写者应用等待所述内存锁的状态切换为释放状态后占用所述内存锁,向所述数据区申请分配所述目标数据主题对应的内存区域。
22、在可选实现方式中,基于共享内存的服务发现方法还包括:
23、对所述目标数据主题对应的内存区域进行引用计数;
24、当所述目标数据主题对应的内存区域的引用计数值为0时,将所述目标数据主题对应的内存区域释放回所述数据区;或者,当所述目标数据主题对应的内存区域的引用计数值为0的连续保持时间达到第一预设时间,则将所述目标数据主题对应的内存区域释放回所述数据区;所述目标数据主题对应的内存区域的引用计数值,指示引用所述目标数据主题对应的内存区域的应用数量。
25、在可选实现方式中,基于共享内存的服务发现方法还包括:
26、对所述共享内存进行引用计数;
27、当所述共享内存的引用计数值为0时,将所述共享内存释放;或者,当所述共享内存的引用计数值为0的连续保持时间达到第二预设时间,则将所述共享内存释放;所述共享内存的引用计数值指示引用所述共享内存的应用数量。
28、在可选实现方式中,所述共享内存还包括写者历史缓存区,所述写者历史缓存区内缓存有所述第一读者应用上线之前,由所述第一写者应用和/或其他写者应用在所述共享内存写入过所述目标数据主题的数据或数据地址;在所述第一读者应用连接所述共享内存后,所述方法还包括:
29、通过所述共享内存向所述第一读者应用提供所述历史缓存区内缓存的所述目标数据主题的数据或数据地址。
30、在可选实现方式中,基于共享内存的服务发现方法还包括:
31、所述第一写者应用上线,锁住所述目标数本文档来自技高网...
【技术保护点】
1.一种基于共享内存的服务发现方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述第一服务发现响应报文还携带所述第一写者应用的进程信息,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述第一通知内存包括内存信号量和通知队列,所述通知队列的数量为N,所述N为所述第一写者应用作为数据提供方且所述第一读者应用作为数据订阅方的数据主题的总数量;所述第一通知内存中的N个通知队列与数据主题具有一对一的关系;
4.根据权利要求1所述的方法,其特征在于,所述目标数据主题对应的内存区域为所述第一写者应用通过以下步骤申请创建:
5.根据权利要求4所述的方法,其特征在于,还包括:
6.根据权利要求1所述的方法,其特征在于,还包括:
7.根据权利要求1所述的方法,其特征在于,所述共享内存还包括写者历史缓存区,所述写者历史缓存区内缓存有所述第一读者应用本次上线之前,由所述第一写者应用和/或其他写者应用在所述共享内存写入所述目标数据主题的数据或者数据地址;在所述第一读者应用连接所述共享内存后,所述方法还
8.根据权利要求1或2所述的方法,其特征在于,还包括:
9.一种基于共享内存的服务发现方法,其特征在于,包括:
10.一种ECU,其特征在于,所述ECU上运行有一个或多个写者应用,其中包括作为目标数据主题的数据提供方的第一写者应用,所述ECU上还运行有一个或多个读者应用,其中包括作为所述目标数据主题的数据订阅方的第一读者应用;
...【技术特征摘要】
1.一种基于共享内存的服务发现方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述第一服务发现响应报文还携带所述第一写者应用的进程信息,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述第一通知内存包括内存信号量和通知队列,所述通知队列的数量为n,所述n为所述第一写者应用作为数据提供方且所述第一读者应用作为数据订阅方的数据主题的总数量;所述第一通知内存中的n个通知队列与数据主题具有一对一的关系;
4.根据权利要求1所述的方法,其特征在于,所述目标数据主题对应的内存区域为所述第一写者应用通过以下步骤申请创建:
5.根据权利要求4所述的方法,其特征在于,还包括:
6.根据权利要求1所述的...
【专利技术属性】
技术研发人员:周凯伦,
申请(专利权)人:东软睿驰汽车技术沈阳有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。