CN105471718B - 一种全双工消息队列的实现方法 - Google Patents

一种全双工消息队列的实现方法 Download PDF

Info

Publication number
CN105471718B
CN105471718B CN201510971121.5A CN201510971121A CN105471718B CN 105471718 B CN105471718 B CN 105471718B CN 201510971121 A CN201510971121 A CN 201510971121A CN 105471718 B CN105471718 B CN 105471718B
Authority
CN
China
Prior art keywords
client
message queue
server
connection
name
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.)
Active
Application number
CN201510971121.5A
Other languages
English (en)
Other versions
CN105471718A (zh
Inventor
刘刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Integrated Electronic Systems Lab Co Ltd
Original Assignee
Integrated Electronic Systems Lab Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Integrated Electronic Systems Lab Co Ltd filed Critical Integrated Electronic Systems Lab Co Ltd
Priority to CN201510971121.5A priority Critical patent/CN105471718B/zh
Publication of CN105471718A publication Critical patent/CN105471718A/zh
Application granted granted Critical
Publication of CN105471718B publication Critical patent/CN105471718B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/226Delivery 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 (4)

1.一种全双工消息队列的实现方法,其特征在于包括如下步骤:
步骤一、服务端创建用于监听并接收客户端发出的建立连接请求的监听消息队列;
步骤二、建立全双工通讯链路;
(1)客户端连接服务端的监听消息队列并使用进程ID为名创建用于临时接收服务端返回数据的临时消息队列;
(2)客户端使用监听消息队列向服务端发送携带客户端进程ID与客户端名称的第一次建立连接握手报文;
(3)服务端收到第一次建立连接握手报文后,首先判断是否已存在与客户端名称相同的客户端并连接临时消息队列,将判断结果发送给客户端;
若判断结果为已存在同名客户端,则结束客户端发出的建立连接请求,客户端关闭临时消息队列;
若判断结果为不存在同名客户端,客户端创建接收消息队列和发送消息队列;
(4)客户端在接收消息队列与发送消息队列创建完成后,使用监听消息队列向服务端发送携带客户端进程ID与客户端名称的第二次建立连接握手报文;
(5)服务端接收到第二次建立连接握手报文后,连接接收消息队列和发送消息队列;
(6)服务端使用发送消息队列向客户端返回第二次握手成功结果;
(7)客户端接收到服务端返送的第二次握手成功结果,全双工通讯链路已正确建立;
步骤三、断开全双工通讯链路
断开全双工通讯链路有两种方式:
方式一、服务端发起连接断开请求后断开与接收消息队列、发送消息队列的连接,客户端接收到服务端发送的连接断开请求后关闭接收消息队列与发送消息队列;
方式二、客户端发起连接断开请求后等待服务端返回断开连接确认,当服务端接收到连接断开请求并向客户端发送断开请求确认后即可断开与接收消息队列、发送消息队列的连接,客户端收到断开请求确认后关闭接收消息队列与发送消息队列。
2.根据权利要求1所述的全双工消息队列的实现方法,其特征在于:步骤一中的客户端、服务端约定一个公知的消息队列名称,服务端使用该名称创建监听消息队列。
3.根据权利要求1所述的全双工消息队列的实现方法,其特征在于:步骤二的(3)中若判断结果为不存在同名客户端,客户端在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串为名创建接收消息队列;在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串为名创建发送消息队列。
4.根据权利要求3所述的全双工消息队列的实现方法,其特征在于:步骤二的(5)中服务端接收到第二次建立连接握手报文后,在客户端名称基础上增加客户端与服务端约定好的发送后缀,以此字符串连接接收消息队列,在客户端名称基础上增加客户端与服务端约定好的接收后缀,以此字符串连接发送消息队列。
CN201510971121.5A 2015-12-22 2015-12-22 一种全双工消息队列的实现方法 Active CN105471718B (zh)

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 CN105471718A (zh) 2016-04-06
CN105471718B true 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)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107945430B (zh) * 2017-11-24 2021-09-14 上海动联信息技术股份有限公司 一种用于智能pos机的基于串口的双向并发通讯方法
CN112073399B (zh) * 2020-08-28 2023-01-31 华迪计算机集团有限公司 基于双向消息队列的数据交换系统
CN114584508B (zh) * 2022-03-02 2024-02-06 华云数据控股集团有限公司 基于Rabbit MQ双工通讯的方法及应用

Citations (2)

* Cited by examiner, † Cited by third party
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 康佳集团股份有限公司 一种应用软件的进程间通信方法和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9578081B2 (en) * 2011-02-02 2017-02-21 Imvu, Inc. System and method for providing an actively invalidated client-side network resource cache

Patent Citations (2)

* Cited by examiner, † Cited by third party
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 康佳集团股份有限公司 一种应用软件的进程间通信方法和系统

Also Published As

Publication number Publication date
CN105471718A (zh) 2016-04-06

Similar Documents

Publication Publication Date Title
CN109088892B (zh) 数据传输方法、系统以及代理服务器
US6381666B1 (en) Method and apparatus for extending the range of the universal serial bus protocol
CN101729543B (zh) 利用异地Socks5技术改善移动SSL VPN性能的方法
CN107454186A (zh) 一种基于消息队列的数据安全传输方法
CN105471718B (zh) 一种全双工消息队列的实现方法
CN106936875B (zh) 基于广域网数据压缩的改进tcp代理方法
CN105162702A (zh) 一种ac引流方法及装置
CN101977209A (zh) 一种网页上实现翻页同步的方法
CN105007308B (zh) 一种数据库隔离装置环境下的文件传输方法
CN104270344A (zh) 万兆网闸
CN110545265A (zh) 一种依赖于att和指示进行适配的数据通信系统及方法
CN105808364B (zh) 融合PC系统和android系统的双系统通信方法和系统
CN108123826B (zh) 一种跨区数据的交互系统及方法
CN104168273B (zh) 一种瘦ap模式下实现tcp代理的方法及系统
CN108667817A (zh) 报文转换系统和报文转换方法
CN107451092A (zh) 一种基于ib网络的数据传输系统
CN110166479A (zh) 一种传输系统提升udp发送效率的方法
CN106302361A (zh) 一种防止网络攻击的方法及设备
CN102681969B (zh) 基于can总线的长帧数据传输方法
CN109656705A (zh) 一种数据处理的方法和装置
CN103220260A (zh) 更新数据的方法、服务器、客户端及系统
CN107241436A (zh) 一种tcp网络高速粘包传输及存储的方法
CN111328056B (zh) 基于att和读写指令进行协议适配的通信方法及系统
CN210274135U (zh) 一种远程连接系统
CN103078883B (zh) 基于ftp的异步式文件传输装置

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