CN105471718A - 一种全双工消息队列的实现方法 - Google Patents
一种全双工消息队列的实现方法 Download PDFInfo
- Publication number
- CN105471718A CN105471718A CN201510971121.5A CN201510971121A CN105471718A CN 105471718 A CN105471718 A CN 105471718A CN 201510971121 A CN201510971121 A CN 201510971121A CN 105471718 A CN105471718 A CN 105471718A
- Authority
- CN
- China
- Prior art keywords
- client
- message queue
- service end
- queue
- full duplex
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/226—Delivery according to priorities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及一种全双工消息队列的实现方法,本发明与原有技术方案相比没有引入其他的进程间通讯手段,同时,又保证了链路上消息队列数据传输的高效性与并发性,给后续基于该方式使用消息队列的应用带来的便利。客户端创建的接收消息队列作为服务端的发送消息队列,使用这种两个消息队列交叉传输方式,既满足了全双工数据传输的需求,同时又发挥了消息队列进程间高速数据传输的优势。
Description
技术领域
本发明涉及数据通讯领域,具体涉及一种全双工消息队列的实现方法。
背景技术
电力调度自动化***是电网运行控制中枢,承担着组织电网运行、指挥事故处理和恢复等重要任务。通常***运行在提供高速数据传输的实时总线上,为提高实时总线在一台计算机内数据的传输速度,需使用快速的进程间通讯手段来提高进程间的数据交互速度。
在传统的操作***提供的进程间通讯方式中,消息队列是一种传输效率较高的方式,且消息队列在使用时操作***对其限制较少,能很好的满足实时总线进程间交互数据的需要。但消息队列在两个进程间通讯时存在一个较大问题是没有实现通讯双方互不干扰的全双工通讯方式。当通讯双方有一方将数据写入消息队列后,任意一方读取该消息队列都会将该消息读走,这样将导致无法在一个消息队列上实现并行的读写操作。
存在该问题的根本原因是消息队列在设计时采用了与共享内存、文件类似的无连接通讯方式,通讯双方在发起数据通讯时不必等待对方是否已准备好,即可直接向消息队列发送数据。消息队列本身提供了缓存功能将接收到的数据暂时缓存下来,当需要接收数据的一方准备好后,就可以从消息队列中将数据取走。显然,出于这种设计场景的通讯方式无法满足通讯双方持续并发读写的需要。
发明内容
针对上述问题,本发明提供一种能够保证数据并发读写的全双工消息队列的实现方法。
为解决上述问题,本发明采取的技术方案为:一种全双工消息队列的实现方法,包括如下步骤:
步骤一、服务端创建用于监听并接收客户端发出的建立连接请求的监听消息队列;
步骤二、建立全双工通讯链路;
(1)客户端连接服务端的监听消息队列并使用进程ID为名创建用于临时接收服务端返回数据的临时消息队列;
进程ID为大多数操作***的内核用于唯一标识进程的一个数值。
(2)客户端使用监听消息队列向服务端发送携带客户端进程ID与客户端名称的第一次建立连接握手报文;
(3)服务端收到第一次建立连接握手报文后,首先判断是否已存在与客户端名称相同的客户端并连接临时消息队列,将判断结果发送给客户端;
若判断结果为已存在同名客户端,则结束客户端发出的建立连接请求,客户端关闭临时消息队列;
若判断结果为不存在同名客户端,客户端创建接收消息队列和发送消息队列;
(4)客户端在接收消息队列与发送消息队列创建完成后,使用监听消息队列向服务端发送携带客户端进程ID与客户端名称的第二次建立连接握手报文;
(5)服务端接收到第二次建立连接握手报文后,连接接收消息队列和发送消息队列;
(6)服务端使用发送消息队列向客户端返回第二次握手成功结果;
(7)客户端接收到服务端返送的第二次握手成功结果,全双工通讯链路已正确建立;
步骤三、断开全双工通讯链路。
在步骤二、步骤三的连接请求中接收与发送消息队列均由主动发起连接请求的客户端建立,服务端仅连接消息队列,使用谁发起请求谁负责关闭的方式,保证通讯双方在读取消息队列时不会失效。
步骤一中的客户端、服务端约定一个公知的消息队列名称,服务端使用该名称创建监听消息队列。
服务端与客户端通信结束后,步骤三中所述的断开全双工通讯链路有两种方式:方式一、服务端发起连接断开请求后断开与接收消息队列、发送消息队列的连接,客户端接收到服务端发送的连接断开请求后关闭接收消息队列与发送消息队列;方式二、客户端发起连接断开请求后等待服务端返回断开连接确认,当服务端接收到连接断开请求并向客户端发送断开请求确认后即可断开与接收消息队列、发送消息队列的连接,客户端收到断开请求确认后关闭接收消息队列与发送消息队列。
步骤二的(3)中若判断结果为不存在同名客户端,客户端在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串为名创建接收消息队列;在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串为名创建发送消息队列。
步骤二的(5)中服务端接收到第二次建立连接握手报文后,在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串连接接收消息队列,在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串连接发送消息队列。
本发明与原有技术方案相比没有引入其他的进程间通讯手段,同时,又保证了链路上消息队列数据传输的高效性与并发性,给后续基于该方式使用消息队列的应用带来的便利。客户端创建的接收消息队列作为服务端的发送消息队列,使用这种两个消息队列交叉传输方式,既满足了全双工数据传输的需求,同时又发挥了消息队列进程间高速数据传输的优势。
具体实施方式
一种全双工消息队列的实现方法,包括如下步骤:
步骤一、服务端使用客户端、服务端约定的一个公知的消息队列名称创建用于监听并接收客户端发出的建立连接请求的监听消息队列;
步骤二、建立全双工通讯链路;
(1)客户端连接服务端的监听消息队列并使用进程ID为名创建用于临时接收服务端返回数据的临时消息队列;
(2)客户端使用监听消息队列向服务端发送携带客户端进程ID与客户端名称的第一次建立连接握手报文;
(3)服务端收到第一次建立连接握手报文后,首先判断是否已
存在与客户端名称相同的客户端并连接临时消息队列,将判断结
果发送给客户端;
若判断结果为已存在同名客户端,则结束客户端发出的建立连接请求,客户端关闭临时消息队列;
若判断结果为不存在同名客户端,客户端在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串为名创建接收消息队列;在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串为名创建发送消息队列;
(4)客户端在接收消息队列与发送消息队列创建完成后,使用
监听消息队列向服务端发送携带客户端进程ID与客户端名称的
第二次建立连接握手报文;
(5)服务端接收到第二次建立连接握手报文后,在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串连接接收消息队列,在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串连接发送消息队列;
(6)服务端使用发送消息队列向通讯客户端返回第二次握手成功结果;
(7)客户端接收到服务端返送的第二次握手成功结果,全双工通讯链路已正确建立;
步骤三、以下述两种方式断开全双工通讯链路:
方式一、服务端发起连接断开请求后断开与接收消息队列、发送消息队列的连接,客户端接收到服务端发送的连接断开请求后关闭接收消息队列与发送消息队列;
方式二、客户端发起连接断开请求后等待服务端返回断开连接确认,当服务端接收到连接断开请求并向客户端发送断开请求确认后即可断开与接收消息队列、发送消息队列的连接,客户端收到断开请求确认后关闭接收消息队列与发送消息队列。
Claims (5)
1.一种全双工消息队列的实现方法,其特征在于包括如下步骤:
步骤一、服务端创建用于监听并接收客户端发出的建立连接请求的监听消息队列;
步骤二、建立全双工通讯链路;
(1)客户端连接服务端的监听消息队列并使用进程ID为名创建用于临时接收服务端返回数据的临时消息队列;
(2)客户端使用监听消息队列向服务端发送携带客户端进程ID与客户端名称的第一次建立连接握手报文;
(3)服务端收到第一次建立连接握手报文后,首先判断是否已存在与客户端名称相同的客户端并连接临时消息队列,将判断结果发送给客户端;
若判断结果为已存在同名客户端,则结束客户端发出的建立连接请求,客户端关闭临时消息队列;
若判断结果为不存在同名客户端,客户端创建接收消息队列和发送消息队列;
(4)客户端在接收消息队列与发送消息队列创建完成后,使用监听消息队列向服务端发送携带客户端进程ID与客户端名称的第二次建立连接握手报文;
(5)服务端接收到第二次建立连接握手报文后,连接接收消息队列和发送消息队列;
(6)服务端使用发送消息队列向客户端返回第二次握手成功结果;
(7)客户端接收到服务端返送的第二次握手成功结果,全双工通讯链路已正确建立;
步骤三、断开全双工通讯链路。
2.根据权利要求1所述的全双工消息队列的实现方法,其特征在于:步骤一中的客户端、服务端约定一个公知的消息队列名称,服务端使用该名称创建监听消息队列。
3.根据权利要求1所述的全双工消息队列的实现方法,其特征在于:服务端与客户端通信结束后,步骤三中所述的断开全双工通讯链路有两种方式:方式一、服务端发起连接断开请求后断开与接收消息队列、发送消息队列的连接,客户端接收到服务端发送的连接断开请求后关闭接收消息队列与发送消息队列;方式二、客户端发起连接断开请求后等待服务端返回断开连接确认,当服务端接收到连接断开请求并向客户端发送断开请求确认后即可断开与接收消息队列、发送消息队列的连接,客户端收到断开请求确认后关闭接收消息队列与发送消息队列。
4.根据权利要求1所述的全双工消息队列的实现方法,其特征在于:步骤二的(3)中若判断结果为不存在同名客户端,客户端在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串为名创建接收消息队列;在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串为名创建发送消息队列。
5.根据权利要求4所述的全双工消息队列的实现方法,其特征在于:步骤二的(5)中服务端接收到第二次建立连接握手报文后,在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串连接接收消息队列,在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串连接发送消息队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510971121.5A CN105471718B (zh) | 2015-12-22 | 2015-12-22 | 一种全双工消息队列的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510971121.5A CN105471718B (zh) | 2015-12-22 | 2015-12-22 | 一种全双工消息队列的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105471718A true CN105471718A (zh) | 2016-04-06 |
CN105471718B CN105471718B (zh) | 2018-10-19 |
Family
ID=55609023
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510971121.5A Active CN105471718B (zh) | 2015-12-22 | 2015-12-22 | 一种全双工消息队列的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105471718B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107945430A (zh) * | 2017-11-24 | 2018-04-20 | 上海动联信息技术股份有限公司 | 一种用于智能pos机的基于串口的双向并发通讯方法 |
CN112073399A (zh) * | 2020-08-28 | 2020-12-11 | 华迪计算机集团有限公司 | 基于双向消息队列的数据交换*** |
CN114584508A (zh) * | 2022-03-02 | 2022-06-03 | 华云数据控股集团有限公司 | 基于Rabbit MQ双工通讯的方法及应用 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101872317A (zh) * | 2010-07-16 | 2010-10-27 | 山东中创软件工程股份有限公司 | VxWorks多任务同步与通信方法 |
CN102833080A (zh) * | 2011-06-15 | 2012-12-19 | 康佳集团股份有限公司 | 一种应用软件的进程间通信方法和*** |
US20140280522A1 (en) * | 2011-02-02 | 2014-09-18 | Imvu Inc. | System and method for providing an actively invalidated client-side network resource cache |
-
2015
- 2015-12-22 CN CN201510971121.5A patent/CN105471718B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101872317A (zh) * | 2010-07-16 | 2010-10-27 | 山东中创软件工程股份有限公司 | VxWorks多任务同步与通信方法 |
US20140280522A1 (en) * | 2011-02-02 | 2014-09-18 | Imvu Inc. | System and method for providing an actively invalidated client-side network resource cache |
CN102833080A (zh) * | 2011-06-15 | 2012-12-19 | 康佳集团股份有限公司 | 一种应用软件的进程间通信方法和*** |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107945430A (zh) * | 2017-11-24 | 2018-04-20 | 上海动联信息技术股份有限公司 | 一种用于智能pos机的基于串口的双向并发通讯方法 |
CN112073399A (zh) * | 2020-08-28 | 2020-12-11 | 华迪计算机集团有限公司 | 基于双向消息队列的数据交换*** |
CN114584508A (zh) * | 2022-03-02 | 2022-06-03 | 华云数据控股集团有限公司 | 基于Rabbit MQ双工通讯的方法及应用 |
CN114584508B (zh) * | 2022-03-02 | 2024-02-06 | 华云数据控股集团有限公司 | 基于Rabbit MQ双工通讯的方法及应用 |
Also Published As
Publication number | Publication date |
---|---|
CN105471718B (zh) | 2018-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1750401B1 (en) | USB 1.1 over a high speed link | |
CN103902486B (zh) | 一种远端直接内存访问实现方法、装置及*** | |
US10484472B2 (en) | Methods and systems for efficiently moving data between nodes in a cluster | |
CN102904959B (zh) | 网络加速方法和网关 | |
WO2017045276A1 (zh) | 终端互联方法、装置和存储介质 | |
CN106775434A (zh) | 一种NVMe网络化存储的实现方法、终端、服务器及*** | |
EP2860936A1 (en) | Tcp data transmission method, tcp uninstallation engine, and system | |
CN102868609A (zh) | 一种最大传输单元协商方法及数据终端 | |
CN105471718A (zh) | 一种全双工消息队列的实现方法 | |
CN104539510A (zh) | 一种基于多协议的信息推送***及方法 | |
CN105007308A (zh) | 一种数据库隔离装置环境下的文件传输方法 | |
CN106850554B (zh) | 双***定向连接的方法和装置 | |
CN109361746A (zh) | 一种物联网的文件传输方法、工牌、及可读存储介质 | |
CN106657076B (zh) | 一种网络命名空间的tcp服务实现方法及装置 | |
CN110572476B (zh) | 一种远程控制方法、装置及设备 | |
CN108234595B (zh) | 日志传输方法及*** | |
CN102932458A (zh) | 一种ppp协议的硬件加速***及其实现方法 | |
CN106357454A (zh) | 日志***控制装置及其控制方法 | |
CN102761780A (zh) | 智能遥控器获取媒体元数据的方法 | |
CN107911288B (zh) | 列车通信网卡及列车控制管理*** | |
CN106102101A (zh) | 一种无线接入点与无线接入控制器连接的处理方法及*** | |
CN104902476A (zh) | 一种蓝牙安全管理的控制方法 | |
CN104333515A (zh) | 一种swift报文处理方法及装置 | |
CN108735278B (zh) | 一种适用于康复设备的指令的传输方法及应用 | |
CN110430023B (zh) | 一种适用于SpaceWire总线通讯的数据传输方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |