一种本地多进程间数据订阅推送的方法

文档序号:8487695阅读:250来源:国知局
一种本地多进程间数据订阅推送的方法
【技术领域】
[0001] 本发明涉及通信技术领域,尤其涉及一种本地多进程间数据订阅推送的方法。
【背景技术】
[0002] 跨进程通信技术是一种软件研发过程中常见的技术,被广泛的应用于实现系统中 跨进程的数据通信和数据共享。而传统的进程间通信技术大多基于点对点通信,需要明确 通信双方,通用性和灵活性较差,往往需要在两两进程之间分别开发进程通信程序,不仅增 加了开发的复杂度,而且通用性和复用性也较差。

【发明内容】

[0003] 本发明要解决的技术问题,在于提供一种本地多进程间数据订阅推送的方法,实 现多个进程间的数据通信和数据共享,通用性高,灵活性好。
[0004] 本发明是这样实现的:一种本地多进程间数据订阅推送的方法,将系统中的不同 的进程通过加载相同的ActiveX组件实现各个进程间的通信;所述ActiveX组件包括:内 存映射注册订阅信息、命名事件、命名管道;所述ActiveX组件之间通过内存映射实现注 册、订阅信息的的共享,所述命名事件是对进程通知事件进行命名,所述命名管道是对进程 数据通信管道进行命名;通过内存映射在多个进程间共享同一份注册订阅和信息;通过命 名事件在不同进程之间相互通知及时更新注册订阅信息;通过命名管道由数据提供者主动 向订阅者建立管道链接并推送数据。
[0005] 进一步地,所述命名事件和命名管道采用同一个随机标识符⑶ID的字符串表示, 系统中的进程每次启动都会重新随机获取一个标识符GUID用于命名系统的事件和管道; 所有的命名管道都是基于报文的,保证命名管道每次收到的数据都是具有完整定义的报 文。
[0006] 进一步地,所述ActiveX组件还包括一个初始化接口、一个资源释放接口、一个数 据推送接口以及一个数据接受回调事件;
[0007] 初始化接口的参数包括:注册数据类型表、订阅数据类型表;该初始化接口用于 初始化内存映射、注册进程信息、自动匹配建立进程间的数据供需关系;
[0008] 资源释放接口:用于进程退出时清理进程注册信息以及进程间的供需关系更新;
[0009] 数据推送接口的参数包括:数据类型、数据起始地址、以及数据大小;该数据推送 接口用于推送进程能够提供的注册数据类型对应的数据,根据进程间数据供需关系进行广 播推送;
[0010] 数据接收回调事件的参数包括:数据类型、数据起始地址以及数据大小,该数据接 收回调事件用于处理命名管道接收到的进程订阅的数据类型对应的数据。
[0011] 进一步地,注册和订阅信息采用内存映射技术,依靠内存映射技术实现不同进程 之间的共享,所述内存映射结构由注册信息、订阅信息、进程索引以及进程详情4部分组 成;
[0012] 所述注册信息用于登记每一种类型的数据都有哪些进程能够提供;其由M个结 构单元T组成,每个结构单元从0开始顺序编号,取值范围为L~T M_i,分别对应一种数 据类型;每个结构单元T由
【主权项】
1. 一种本地多进程间数据订阅推送的方法,其特征在于:将系统中的不同的进程通过 加载相同的ActiveX组件实现各个进程间的通信;所述ActiveX组件包括:内存映射注册 订阅信息、命名事件、命名管道;所述ActiveX组件之间通过内存映射实现注册、订阅信息 的的共享,所述命名事件是对进程通知事件进行命名,所述命名管道是对进程数据通信管 道进行命名;通过内存映射在多个进程间共享同一份注册订阅和信息;通过命名事件在不 同进程之间相互通知及时更新注册订阅信息;通过命名管道由数据提供者主动向订阅者建 立管道链接并推送数据。
2. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:所述 命名事件和命名管道采用同一个随机标识符GUID的字符串表示,系统中的进程每次启动 都会重新随机获取一个标识符GUID用于命名系统的事件和管道;所有的命名管道都是基 于报文的,保证命名管道每次收到的数据都是具有完整定义的报文。
3. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:所述 ActiveX组件还包括一个初始化接口、一个资源释放接口、一个数据推送接口以及一个数据 接受回调事件; 初始化接口的参数包括:注册数据类型表、订阅数据类型表;该初始化接口用于初始 化内存映射、注册进程信息、自动匹配建立进程间的数据供需关系; 资源释放接口:用于进程退出时清理进程注册信息以及进程间的供需关系更新; 数据推送接口的参数包括:数据类型、数据起始地址、以及数据大小;该数据推送接口 用于推送进程能够提供的注册数据类型对应的数据,根据进程间数据供需关系进行广播推 送; 数据接收回调事件的参数包括:数据类型、数据起始地址以及数据大小,该数据接收回 调事件用于处理命名管道接收到的进程订阅的数据类型对应的数据。
4. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:注册 和订阅信息采用内存映射技术,依靠内存映射技术实现不同进程之间的共享,所述内存映 射结构由注册信息、订阅信息、进程索引以及进程详情4部分组成; 所述注册信息用于登记每一种类型的数据都有哪些进程能够提供;其由M个结构 单元T组成,每个结构单元从0开始顺序编号,取值范围为I~TM_i,分别对应一种数 据类型;每个结构单元T由f个字节组成,P为进程数上限值;每个字节的每一位 Tmi(0彡m彡M-1,0彡i彡7)代表一个进程的索引,值为1则表示该位索引对应的进程能 够提供该数据,值为〇则不能够提供该数据;其中,1对应的进程索引编号为(m*8+i)的进 程; 所述订阅信息的结构和注册信息是相同的,用于登记对应的数据类型都有哪些进程 订阅了;同样由M个结构单元T组成,每个结构单元从0开始顺序编号,取值范围为IV- In,分别对应一种数据类型;每个结构单元T由个字节组成,每个字节的每一位 Tmi(0彡m彡M-1,0彡i彡7)代表一个进程的索引,值为1则表示该位索引对应的进程订 阅该类型的数据,值为0则未订阅该类型的数据;其中,1对应的进程索引编号为(m*8+i) 的进程; 所述进程索引用于标识所述的进程详情中预分配的P个进程空间的使用情况,其大小 为¥个字节,每个字节中的每一位代表对?应索弓丨的进程s间使m青况;1表示b被 占用,0则表示空闲;其中M〇彡i彡p-l,0彡j彡7)表示第i个字节的第j位,其对应 的进程空间索引为(i*8+j); 所述进程详情用于存放每个进程对应命名管道和命名事件的名称,其大小为P*32个 字节,每32个字节存储对应索引进程的命名管道和命名事件的名称;每个进程索引i对应 的名称存储的相对进程详情的偏移地址为i*32 ; 内存映射大小的计算公式:内存映射大小S=注册信息+订阅信息+进程索引+进程 详情 其对应计算公式为:
5. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:所述 方法进一步包括初始化流程:初始化ActiveX组件获得标识符GUID创建命名事件和命名管 道;创建订阅新型更新线程、命名管道监听线程、数据接收线程;判断内存映射是否存在; 否,则创建并初始化内存映射;是,则初始化进程注册订阅信息,获取注册数据类型对应订 阅进程的标识符GUID,并建立与所有标识符GUID对应的命名管道链接;绑定命名管道链接 与订阅的数据类型的映射关系,从而完成初始化。
6. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:所 述更新注册订阅信息具体为:更新注册订阅信息,循环等待命名事件激活,判断线程是否 退出,是,则线程退出并结束;否,则判断命名事件是否激活,否,则循环等待命名事件激 活;是,则加载内存映射,获取注册数据类型对应订阅进程的标识符GUID;判断所有标识符 GUID对应的命名管道是否已链接;否,与未链接的命名管道建立链接,并循环等待命名事 件激活;是,判断所有已链接的命名管道的标识符GUID是否都存在,否,则关闭标识符GUID 不存在的命名管道,并解除命名管道与数据类型的映射关系,并循环等待命名事件激活; 是,则循环等待命名事件激活。
7. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:所述 推送数据具体为:查询订阅该类型的所有命名管道链接,判断查询结果是否为空,是,则推 送结束并结束流程;否,判断查询是否遍历结束;是,则推送结束并结束流程;否获取下一 个命名管道链接,推送数据。
8. 根据权利要求5所述的一种本地多进程间数据订阅推送的方法,其特征在于:所述 命名管道监听线程的监听流程具体为:循环等待客户端建立链接,判断线程是否退出,是, 则推送结束并结束流程;否,则判断是否建立链接请求,否,则循环等待客户端建立链接, 是,绑定通知消息并添加到客户端列表中;循环等待客户端建立链接。
9. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:所述 方法进一步包括数据接收流程:循环等待数据接收消息,判断线程是否退出,是,线程退出 并结束流程;否,判断消息的数据是否到达,否,则循环等待数据接收消息,是,查询该消息 绑定的所有客户端连接,判断查询结果是否为空,是,则循环等待数据接收消息,否,判断是 否查询遍历结束,是,则循环等待数据接收消息;否,获取下一个命名管道链接,并接受数 据,判断是否接收到数据,否,则重新判断是否查询遍历结束,是,通过回调时间通知处理接 收数据。
10. 根据权利要求1所述的一种本地多进程间数据订阅推送的方法,其特征在于:所述 方法进一步包括退出流程:关闭订阅信息更新线程、命名管道监听线程、数据接收线程;将 内存映射注册信息的所有类型中该进程索引对应的标志位置为〇 ;将内存映射订阅信息的 所有类型中该进程索引对应的标志位置为〇,获取订阅数据类型对应数据提供进程的标识 符GUID,并激活所有标识符GUID对应的命名事件,解除所有命名管道链接与订阅的数据类 型的映射关系,关闭本进程所有猪洞建立的命名管道链接;回收进程索引,将内存映射中进 程索引对应标志位置为0,判断是否所有进程均已退出,否,退出并结束,是,释放内存映射。
【专利摘要】本发明提供一种本地多进程间数据订阅推送的方法,将系统中的不同的进程通过加载相同的ActiveX组件实现各个进程间的通信;所述ActiveX组件包括:内存映射注册订阅信息、命名事件、命名管道;命名事件是对进程通知事件进行命名,命名管道是对进程数据通信管道进行命名;通过内存映射将多个进程共享同一份注册订阅信息;通过命名事件在不同进程之间相互通知及时更新注册订阅信息;通过命名管道由数据提供者主动向订阅者建立管道链接并推送数据。本发明实现多个进程间的数据通信和数据共享,通用性高,灵活性好。特别适用于在不同系统进程之间的数据通信和数据共享,有效降低后台系统集成复杂度和数据重复访问获取的压力。
【IPC分类】G06F9-54
【公开号】CN104809028
【申请号】CN201510228881
【发明人】林国清, 林文山, 林秋芳
【申请人】厦门雅迅网络股份有限公司
【公开日】2015年7月29日
【申请日】2015年5月7日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1