CN102355429A - 基于管道的多进程间消息通信方法 - Google Patents
基于管道的多进程间消息通信方法 Download PDFInfo
- Publication number
- CN102355429A CN102355429A CN2011102307148A CN201110230714A CN102355429A CN 102355429 A CN102355429 A CN 102355429A CN 2011102307148 A CN2011102307148 A CN 2011102307148A CN 201110230714 A CN201110230714 A CN 201110230714A CN 102355429 A CN102355429 A CN 102355429A
- Authority
- CN
- China
- Prior art keywords
- message
- message center
- communication
- pipeline
- client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明涉及windows进程间通信技术领域,公开了一种基于管道的多进程间消息通信方法,包括以下步骤:S1、进程向消息中心进行注册,即发送进程信息,所述消息中心是用于处理消息的服务程序,所述进程信息包括消息标识;S2、所述消息中心将与所述消息标识对应的消息发送给所述进程;在步骤S1与S2的通信过程中,进程与消息中心之间使用管道进行通信。本发明能够使各进程间通信的实现变得简单。
Description
技术领域
本发明涉及windows进程间通信技术领域,特别涉及一种基于管道的多进程间消息通信方法。
背景技术
进程是装入内存并独立执行的程序,每个进程都有自己的私有进程空间,对其他进程是不可见的。而这些独立的进程间要交换数据就要用到进程间通信机制,进程通过这种进程间通信机制向其他进程传输控制信息,或与其他进程交换数据,但是这种通信存在单一性和不可控性,例如:a进程与b进程之间有通信需求,c进程与a、b都没有通信需求,但是c进程需要关注a,b进程的通信状态,以便做出相应的处理,这种情况下会想到,可以在a与b通信后或通信的同时与c通信告知a与b通信的状态,但这种通信方式需要控制同步问题,而且当有通信和关注通信需求的进程不是三个而是数十个,这种方案在代码实现上就会变得臃肿和不可控,当然最主要的是不利于新程序的添加。
又如上面的例子,假如a、b、c程序都已经写好了,现在有个新的需求:要添加一个新的程序d,它要关注a与b的通信,又要与c发消息,那么就需要同时改写a、b、c程序,这显然是不可行的。
综上,现有技术中各应用程序间之间直接进行通信,就要知道要和那个进程通信,尤其是当通信的进程并不能确定时,处理上变得不可控,而且会频繁修改代码。当有新的进程要与原来已经写好的程序通信时,就要修改原有的程序代码。以适应新的需求。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何使各进程间通信的实现变得简单。
(二)技术方案
为解决上述技术问题,本发明提供了一种基于管道的多进程间消息通信方法,包括以下步骤:
S1、进程向消息中心进行注册,即发送进程信息,所述消息中心是用于处理消息的服务程序,所述进程信息包括消息标识;
S2、所述消息中心将与所述消息标识对应的消息发送给所述进程;
在步骤S1与S2的通信过程中,进程与消息中心之间使用管道进行通信。
优选地,所述消息中心与进程间以异步事件的机制实现通信。
优选地,步骤S1中,在消息中心收到进程信息之后对进程信息进行保存,而在步骤S1与S2的通信过程中,如果消息中心异常退出和被强制杀掉,消息中心在恢复之后自动根据所保存的进程信息与进程间进行重新连接。
优选地,消息中心与进程都以消息流的模式发送数据。
优选地,在步骤S1之前还包括消息中心进行初始化的步骤。
(三)有益效果
本发明由于引入了消息中心对消息进行统一处理,因此克服了现有技术中各进程间通信需要频繁修改代码的问题,从而使各进程间通信的实现变得简单;消息中心(即服务器端)与进程(即客户端)间以异步事件的机制实现,使得消息中心与进程间使用管道进行通信时不会产生阻塞,从而保障各进程间的正常消息通信;添加了灾难恢复机制,在消息中心异常退出和被强制杀掉时,仍然能够保障消息中心与进程间的正常通信,从而保障各进程间的正常消息通信;消息中心与进程都以消息流的模式发送数据(即发送的时候装包,接收后解包),使得在进程较多而消息中心较繁忙时也能保证接收的一端(某一进程)可以得到与发送时等长的数据。
附图说明
图1是本发明的方法流程图;
图2是本发明的方法的详细流程图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细说明。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1、2所示,本发明提供了一种基于管道的多进程间消息通信方法。
对于服务器端,即消息中心,首先进行如下初始化处理:
初始化客户端队列锁,客户端(即进程)注册的信息会保存到并在该队列中维护;
初始化删除队列锁,客户端退出或关闭后,将其注册信息移至该队列中;
消息中心以指针队列的形式维护客户端队列和删除客户端队列,每个队列节点存储着注册的客户端id(即进程标识),和所关注的消息结构体,消息结构体包括消息id(即消息标识)、消息自定义常量、消息数据指针和消息数据长度;
初始化通讯服务器,创建服务器端的管道,用管道的方式将序列化后的数据传出去;
启动消息循环,处理来自客户端的消息;
启动时间发生器回收内存:服务器端定时检查删除队列中的节点,将注销的客户端节点释放掉,以节省内存空间。
然后等待客户端注册:
消息中心初始化完成后,处于等待状态,当有客户端注册请求发生时,将管道中传过来的数据流进行解包,封装成结构体后作为客户端队列锁的一个节点添加到队列中。
启动并处理消息:
服务端注册成功后,便向客户端返回注册结果,然后等待客户端的启动消息通知(即启动命令),当接收到启动通知后,处理来自客户端的消息,处理的方式由三种:广播消息,将消息广播给所有注册的客户端;查询消息,根据查询的消息代号查找指定内容;转发消息,根据注册时的信息将消息转发给指定的客户端;将停止消息循环的客户端移至删除队列。
删除消息注册:
当客户端不需要关注或发送消息时,或客户端正常关闭或异常销毁时,服务器端会将客户端注册在队列中的节点删除,并将该节点添加到删除队列中,待服务器端的定时器达到预设时间时会将删除队列中的数据清除掉。
对于客户端,进行以下处理:
首先向服务端注册:
注册客户端信息,包括客户端ID,关注的消息队列(其中包括关注的消息结构体,消息结构体包括消息id),服务的消息队列;
然后向服务器端发送启动命令:
启动命令发送成功后,当服务器端接受到客户端注册的信息时,会将与消息ID对应的消息派送给客户端。
向服务端发送停止命令:
当客户端不需要发消息,同时也不需要关注任何消息时,可以向服务端发送停止命令,这样服务器端就会将该客户端注册的信息在队列中删除,不再处理,如果客户端没有关闭就退出或是异常情况下崩溃,服务端也会将该客户端注册的消息删除。
由以上实施例可以看出,本发明由于引入了消息中心对消息进行统一处理,因此克服了现有技术中各进程间通信需要频繁修改代码的问题,从而使各进程间通信的实现变得简单;消息中心(即服务器端)与进程(即客户端)间以异步事件的机制实现,使得消息中心与进程间使用管道进行通信时不会产生阻塞,从而保障各进程间的正常消息通信;添加了灾难恢复机制,在消息中心异常退出和被强制杀掉时,仍然能够保障消息中心与进程间的正常通信,从而保障各进程间的正常消息通信;消息中心与进程都以消息流的模式发送数据(即发送的时候装包,接收后解包),使得在进程较多而消息中心较繁忙时也能保证接收的一端(某一进程)可以得到与发送时等长的数据。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (5)
1.一种基于管道的多进程间消息通信方法,其特征在于,包括以下步骤:
S1、进程向消息中心进行注册,即发送进程信息,所述消息中心是用于处理消息的服务程序,所述进程信息包括消息标识;
S2、所述消息中心将与所述消息标识对应的消息发送给所述进程;
在步骤S1与S2的通信过程中,进程与消息中心之间使用管道进行通信。
2.如权利要求1所述的方法,其特征在于,所述消息中心与进程间以异步事件的机制实现通信。
3.如权利要求1所述的方法,其特征在于,步骤S1中,在消息中心收到进程信息之后对进程信息进行保存,而在步骤S1与S2的通信过程中,如果消息中心异常退出和被强制杀掉,消息中心在恢复之后自动根据所保存的进程信息与进程间进行重新连接。
4.如权利要求1所述的方法,其特征在于,消息中心与进程都以消息流的模式发送数据。
5.如权利要求1~4中任一项所述的方法,其特征在于,在步骤S1之前还包括消息中心进行初始化的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102307148A CN102355429A (zh) | 2011-08-12 | 2011-08-12 | 基于管道的多进程间消息通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102307148A CN102355429A (zh) | 2011-08-12 | 2011-08-12 | 基于管道的多进程间消息通信方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102355429A true CN102355429A (zh) | 2012-02-15 |
Family
ID=45578926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011102307148A Pending CN102355429A (zh) | 2011-08-12 | 2011-08-12 | 基于管道的多进程间消息通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102355429A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819455A (zh) * | 2012-07-31 | 2012-12-12 | 深圳市共进电子股份有限公司 | 一种在应用层对进程进行管理的方法和管理系统 |
CN103605529A (zh) * | 2013-05-17 | 2014-02-26 | 华为终端有限公司 | 应用程序的处理方法和装置 |
CN104702627A (zh) * | 2015-04-01 | 2015-06-10 | 南京天溯自动化控制系统有限公司 | 一种基于报文分类的同步并发通信方法及系统 |
CN104809028A (zh) * | 2015-05-07 | 2015-07-29 | 厦门雅迅网络股份有限公司 | 一种本地多进程间数据订阅推送的方法 |
CN106162075A (zh) * | 2016-06-17 | 2016-11-23 | 浙江万朋教育科技股份有限公司 | 一种单台pc实现多路视频输入的稳定解决方法 |
CN109062686A (zh) * | 2018-07-09 | 2018-12-21 | 武汉斗鱼网络科技有限公司 | 多进程管理方法、存储介质、电子设备及系统 |
CN109992428A (zh) * | 2017-12-29 | 2019-07-09 | 北京京东尚科信息技术有限公司 | 数据处理方法及系统 |
CN110018908A (zh) * | 2018-01-08 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN110928700A (zh) * | 2018-09-20 | 2020-03-27 | 北京君正集成电路股份有限公司 | 多进程通讯方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044551A1 (en) * | 2003-08-19 | 2005-02-24 | Sodhi Ajit S. | System and method for shared memory based IPC queue template having event based notification |
CN1975680A (zh) * | 2006-11-27 | 2007-06-06 | 浙江大学 | 基于Java的进程间异步通信的实现方法 |
CN102103526A (zh) * | 2011-02-14 | 2011-06-22 | 博视联(苏州)信息科技有限公司 | 服务端和客户端间通过服务管理进行进程间通信的方法及系统 |
-
2011
- 2011-08-12 CN CN2011102307148A patent/CN102355429A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044551A1 (en) * | 2003-08-19 | 2005-02-24 | Sodhi Ajit S. | System and method for shared memory based IPC queue template having event based notification |
CN1975680A (zh) * | 2006-11-27 | 2007-06-06 | 浙江大学 | 基于Java的进程间异步通信的实现方法 |
CN102103526A (zh) * | 2011-02-14 | 2011-06-22 | 博视联(苏州)信息科技有限公司 | 服务端和客户端间通过服务管理进行进程间通信的方法及系统 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819455A (zh) * | 2012-07-31 | 2012-12-12 | 深圳市共进电子股份有限公司 | 一种在应用层对进程进行管理的方法和管理系统 |
CN103605529A (zh) * | 2013-05-17 | 2014-02-26 | 华为终端有限公司 | 应用程序的处理方法和装置 |
CN103605529B (zh) * | 2013-05-17 | 2018-01-23 | 华为终端(东莞)有限公司 | 应用程序的处理方法和装置 |
CN104702627B (zh) * | 2015-04-01 | 2017-12-26 | 南京天溯自动化控制系统有限公司 | 一种基于报文分类的同步并发通信方法及系统 |
CN104702627A (zh) * | 2015-04-01 | 2015-06-10 | 南京天溯自动化控制系统有限公司 | 一种基于报文分类的同步并发通信方法及系统 |
CN104809028A (zh) * | 2015-05-07 | 2015-07-29 | 厦门雅迅网络股份有限公司 | 一种本地多进程间数据订阅推送的方法 |
CN104809028B (zh) * | 2015-05-07 | 2020-05-12 | 厦门雅迅网络股份有限公司 | 一种本地多进程间数据订阅推送的方法 |
CN106162075A (zh) * | 2016-06-17 | 2016-11-23 | 浙江万朋教育科技股份有限公司 | 一种单台pc实现多路视频输入的稳定解决方法 |
CN109992428A (zh) * | 2017-12-29 | 2019-07-09 | 北京京东尚科信息技术有限公司 | 数据处理方法及系统 |
CN109992428B (zh) * | 2017-12-29 | 2022-06-07 | 北京京东尚科信息技术有限公司 | 数据处理方法及系统 |
CN110018908A (zh) * | 2018-01-08 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN110018908B (zh) * | 2018-01-08 | 2021-05-28 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN109062686A (zh) * | 2018-07-09 | 2018-12-21 | 武汉斗鱼网络科技有限公司 | 多进程管理方法、存储介质、电子设备及系统 |
CN109062686B (zh) * | 2018-07-09 | 2021-04-23 | 武汉斗鱼网络科技有限公司 | 多进程管理方法、存储介质、电子设备及系统 |
CN110928700A (zh) * | 2018-09-20 | 2020-03-27 | 北京君正集成电路股份有限公司 | 多进程通讯方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102355429A (zh) | 基于管道的多进程间消息通信方法 | |
EP1746791A1 (en) | Network attack combating method, network attack combating device and network attack combating program | |
CN101635726B (zh) | C/s架构中服务端和客户端的业务执行方法及系统 | |
CN106657299B (zh) | 关注主播上线提醒方法及系统 | |
CN106452951B (zh) | 一种信息处理方法、装置及系统 | |
EP3804233B1 (en) | Method and apparatus for performing communication in internet of things | |
CN110855746A (zh) | 中间件管理方法、电子装置及存储介质 | |
CN103677988A (zh) | 用于软件系统的多进程通讯方法及系统 | |
CN113726581B (zh) | 一种恢复网络设备的出厂配置的方法、装置及网络设备 | |
US8751560B2 (en) | Method and device arrangement for managing a client/server environment | |
CN107391274A (zh) | 离线消息的处理方法及装置 | |
CN106412296B (zh) | 终端设备控制方法及装置 | |
CN111294288A (zh) | 一种流量识别方法、装置、应用程序接口网关和存储介质 | |
JP2003304269A (ja) | ネットワークフィルタドライバのためのアーキテクチャおよびランタイム環境 | |
CN104573489A (zh) | 禁止应用创建桌面图标的方法及装置 | |
CN101980170B (zh) | 一种微内核系统中软件模块的通信方法、系统及装置 | |
US8032928B2 (en) | Methods, devices, and computer program products for controlling wireless connection access | |
CN114020453A (zh) | 服务总线消息处理方法、服务总线系统、电子设备及介质 | |
CN111552581B (zh) | 事件传递方法、装置、系统和电子设备 | |
CN114090283A (zh) | 一种消息推送方法、装置、电子设备及存储介质 | |
CN107888677A (zh) | 一种通信实现方法、控制端、智能设备及系统 | |
CN109375966B (zh) | 一种节点初始化的方法、装置、设备及存储介质 | |
CN111859239A (zh) | 用于消息推送的方法及装置、电子设备 | |
KR102260085B1 (ko) | 푸시 알림 기반 원격 제어 방법 및 이를 위한 장치 | |
JP2009009408A (ja) | ストレージシステムとストレージシステムにおける管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120215 |