CN102111419A - 一种基于消息中间件的客户端自动重连方法 - Google Patents
一种基于消息中间件的客户端自动重连方法 Download PDFInfo
- Publication number
- CN102111419A CN102111419A CN2011100536617A CN201110053661A CN102111419A CN 102111419 A CN102111419 A CN 102111419A CN 2011100536617 A CN2011100536617 A CN 2011100536617A CN 201110053661 A CN201110053661 A CN 201110053661A CN 102111419 A CN102111419 A CN 102111419A
- Authority
- CN
- China
- Prior art keywords
- thread
- message
- client
- sessionid
- server
- 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
- 238000000034 method Methods 0.000 title claims abstract description 34
- 230000008569 process Effects 0.000 claims abstract description 15
- 239000000725 suspension Substances 0.000 claims description 12
- 230000006854 communication Effects 0.000 claims description 7
- 230000015556 catabolic process Effects 0.000 abstract 1
- 230000015572 biosynthetic process Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明涉及一种基于消息中间件的客户端自动重连方法,通过对服务器处理客户端请求的线程的设计和对客户端的具体操作,解决客户端断后自动重连问题,当消息的发送者出现断网等异常后,保证了不少丢失消息、不重复发送消息。
Description
技术领域
本发明涉及一种基于消息中间件的客户端自动重连方法,属于计算机网络及信息中间件技术。
背景技术
面向消息的中间件(MOM)作为一个中间层软件,它为分布式系统中创建、发送、接收消息提供了一套可靠通用的方法,实现了分布式系统中可靠的、高效的、实时的跨平台数据传输,提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的消息中间件通信。它提供了有保证的消息发送,减少了开发跨平台和网络协议软件的复杂性,它屏蔽了不同操作系统和网络协议的具体细节,应用程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节。 在消息中间件客户端,主要对象有:连接工厂、连接、会话、消息生产者、消息消费者及消息。他们的主要关系是:首先由连接工厂创建连接,由连接创建会话,由会话创建消息生产者和消费者,然后由会话创建消息。所创建的消息由生产者(实现上,可以采用生产者代理)发送到目的地,消息消费者(实现上,可以采用消费者代理)从目的地接收。消息中间件提供了两种消息服务模型:基于队列的点对点模型(P2P模型)和基于主题的发布订阅模型(Publish-Subscribe模型,简称PS模型)。
在 P2P 模型中,所有消息都被发送到特定的队列,这些消息在队列中保持到用尽了自己的时间限制或者由接收者处理。值得注意的是,每条消息都得到一个必须处理一次的操作,并且只处理一次。发送和接收消息与时间没有关系,消费者必须确认对消息的接收。消费者确认了一次接收之后,相应的消息就会被从队列中删除。
PS消息模型是一对多的模型,即一条消息会被多个接收者接到。发布者将消息发送到主题,该主题的所有活动订阅者将接收该消息。没有监听该主题的非活动订阅者将错过这个已发布的消息。 如果没有监听该主题的非活动订阅者也想接收到它订阅的、发布到该主题所有消息,可以使用消息持久化来实现。
消息中间件的异步传输消息特性,持久化消息、持续订阅、流量控制等技术使得消息中间件稳定性、可靠性都有很大的改进。但是目前的消息中间件没有很好的解决客户端断后自动重连问题。例如消息的发送者出现断网等异常后,如何保证不少丢失消息、不重复发送消息;消息接收者出现断网异常后,如何保证每条消息都能接收到,并且只接收到一份。
发明内容
本发明的目的在于解决消息中间件存在的客户端断后自动重连问题。
为实现上述目的,本发明采用如下技术方案:一种基于消息中间件的客户端自动重连方法,包括服务器和客户端, 所述服务器处理客户端请求的线程包括以下步骤:
1)接收到客户端发来请求,进行握手过程,然后接收客户端发送过来的sessionID(会话标识符),解析sessionID,判断是否为空,若为空,则执行步骤2),否则执行步骤3);
2)服务器自动生成一个唯一的sessionID,将sessionID发送给客户端,执行步骤4);
3)判断sessionID与该客户端在服务器中保存的sessionID是否一致,若一致,执行步骤4),否则,执行步骤5);
4)接收并处理客户端请求
5)向客户端发送错误报告,关闭该客户端连接;
所述客户端的具体操作包括以下步骤:
1)创建socket(套接字)连接成功后,启动socket的读线程R和写线程W,然后将通讯过程交给读线程R和写线程W;
2)置sessionID为空,让读线程R、写线程W进行握手过程,若握手失败,则关闭连接并退出,否则判断该客户端是消息发送者,还是接收者,如果是消息发送者,进入步骤3),否则进入步骤4);
3)写线程W、读线程R进行发消息过程,直到把消息发完;
4)写线程W发送接收消息请求,然后写线程W、读线程R进行接收消息过程,进行接收消息过程;
5)若写线程W捕获到网络异常,保存数据,设置网络异常标识变量为真,然后定时的连接服务器,直到连接上或者连接次数超过上限。连接创建成功后,重新执行握手过程,回到断网前的状态;
6)若读线程R捕获到网络异常,睡眠一段时间,判断标识变量是否为真,若为真,则表示写线程W已经捕获到了网络异常,将标识为设为假,回到原来状态;否则,阻塞写线程W,启动一个新的写线程W2,与读线程R一起进行握手过程,握手成功后,杀死写线程W2,唤醒写线程W,回到断网前的状态。
本发明很好的解决客户端断后自动重连问题,当消息的发送者出现断网等异常后,保证了不少丢失消息、不重复发送消息;消息接收者出现断网异常后,保证了每条消息都能接收到,并且只接收到一份。
附图说明
图1 是消息中间件结构模型图;
图2 是消息中间件通讯模型图;
图3是服务器中处理客户端请求的线程的流程图;
图4 是消息接收客户端流程图;
图5 是写线程断网处理流程图。
具体实施方式
以下结合具体实施例对本发明作进一步描述。
消息中间件的结构模型图如附图1所示、、消息中间件通讯模型图如附图2所示,本发明即是应用于附图1的模型和附图2所示的通信结构中。
在附图1的消息中间件的模型中,应用程序A通过API(应用程序接口)与面向消息中间件企业消息系统进行通信,面向消息中间件企业消息系统也可以API与应用程序B进行通信,从而可以实现应用程序A与应用程序B的通信。从消息中间件模型中可以知道,应用程序之间不直接进行交互,被消息中间件进行了解耦,从而保证了作为客户端的应用程序之间松耦合。
在附图2描述了应用程序客户端与消息服务器之间的通信模型。消息服务器中目的地即是服务器存储消息的方式,包括队列和主题方式。客户端可以通过API将消息发送到消息服务器中的队列或者主题中,也可以通过API从消息服务器的队列或者主题中获取消息。本发明就是针对客户端往消息服务器发消息,或者从消息服务器中读消息的过程中,客户端或者服务器出现了端开状态后,采取的自动重新连接策略。
在消息中间件的服务器端,启动服务器后,可以启动若干处理客户端请求的线程,每个线程按照附图3描述的流程图进行操作:
(1)首先判断客户端的连接是否关闭,若关闭了,则进行一系列的善后处理,然后返回;
(2)然后进行握手过程:首先验证用户名密码等,接着解析分析客户端发送过来的sessionID是否为空;
(3)若sessionID为空,表示这个用户为离线状态,为该客户端分配一个唯一的sessionID,并发送给该客户端;
(4)若sessionID不为空,表示该用户在线,需要对该客户端的sessionID进行校验,判断sessionID与服务器中保存的sessionID是否一致;
(5)若发送过来的sessionID与服务器保存的sessionID不一致,将错误报告发送给客户端,并返回;
(6)若发送过来的sessionID与服务器保存的sessionID一致,表示该客户端是进行断后重连的,接收该客户端的请求,并进行相应的处理。
在消息中间件客户端,首先要对客户端的一些参数进行设置如附图4所示,如最大重连次数、每次重连的时间间隔以及读线程R捕获到异常的睡眠时间等,然后执行如下步骤:
(1)根据服务器的IP(网络地址)、端口等创建一个客户端连接,如果创建失败,返回并退出;
(2)创建对socket进行读写的线程:读线程R和写线程W,并启动这两个线程;
(3)将客户端用户名、密码等信息通过W线程发送到服务器端,服务器通过一系列校验后,返回客户端该用户是否合法;如果没有通过验证,则关闭连接并退出;
(4)置sessionID为空,通过W线程,将sessionID发送给服务器端,服务器收到后,生成一个sessionID发回给该客户端。客户端收到sessionID后,保存起来;
(5)判断用客户端为消息发送端,还是消息接收端;如果是消息发送端,执行步骤(6);否则执行步骤(7);
(6)用户通过W线程将消息发送到服务器端,服务器根据用户发消息的模式例如是否需要回复ACK等,决定是否需要对该消息发送ACK信息;如果不需要的,则R线程不做操作;否则R线程收到该ACK信息,再做相应操作;
(7)用户通过W线程,先向服务器发送一条读消息的请求,然后R线程从服务器中读取了一批消息,再一条一条的转发给客户端处理;客户端处理一条消息的过程中,可能需要服务器删除该消息,此时就需要通过W线程将消息确认信息发往服务器。
在客户端的W线程发送消息或者确认信息以及R线程读取ACK信息或者消息的过程中,都有可能出现断网情况,如附图5所示在此情况下:
在W线程捕获到网络异常时进行如下操作:
(1) 保存发送失败的消息,并设置断网标识变量为真;
(2) 尝试去重新创建连接,如果失败,则睡眠一段时间,继续尝试;当尝试的次数达到上限时,客户端不再重连;
(3) 如果某次重新创建连接成功,重新进行握手过程,并校验sessionID等,成功,则回到断网前的状态,并重新发送之前发送失败的消息。
在R线程捕获到网络异常时,进行如下操作:
(1)首先睡眠小段时间,其目的是防止出现R线程和W线程几乎在同时捕获到网络异常;
(2)判断标识变量是否为真,若为真,则表示W线程已经捕获到了网络异常,重连交给W线程来做,R线程只需将标识变量重新置为假,然后返回,并继续等着服务器发过来的信息即可;
(3)若标识变量为假,则重连要交给R线程来做。R线程首先阻塞W线程,并重新启动另一个socket写线程W2,由W2来进行握手过程,R线程继续等待服务器发过来的信息,并做相应操作;
(4 )W2线程的重连成功后,W2线程唤醒W线程,W2线程退出。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围内。
Claims (1)
1.一种基于消息中间件的客户端自动重连方法,包括服务器和客户端,其特征在于
所述服务器处理客户端请求的线程包括以下步骤:
1)接收到客户端发来请求,进行握手过程,然后接收客户端发送过来的sessionID,解析sessionID,判断是否为空,若为空,则执行2),否则执行3);
2)服务器自动生成一个唯一的sessionID,将sessionID发送给客户端,执行4);
3)判断sessionID与该客户端在服务器中保存的sessionID是否一致,若一致,执行4),否则,执行5);
4)接收并处理客户端请求
5)向客户端发送错误报告,关闭该客户端连接;
所述客户端的具体操作包括以下步骤:
1)创建socket连接成功后,启动socket的读线程R和写线程W,然后将通讯过程交给读线程R和写线程W;
2)置sessionID为空,让读线程R、写线程W进行握手过程,若握手失败,则关闭连接并退出,否则判断该客户端是消息发送者,还是接收者,如果是消息发送者,进入3),否则进入4);
3)写线程W、读线程R进行发消息过程,直到把消息发完;
4)写线程W发送接收消息请求,然后写线程W、读线程R进行接收消息过程,进行接收消息过程;
5) 若写线程W捕获到网络异常,保存数据,设置网络异常标识变量为真,然后定时的连接服务器,直到连接上或者连接次数超过上限。连接创建成功后,重新执行握手过程,回到断网前的状态;
6) 若读线程R捕获到网络异常,睡眠一段时间,判断标识变量是否为真,若为真,则表示写线程W已经捕获到了网络异常,将标识为设为假,回到原来状态;否则,阻塞写线程W,启动一个新的写线程W2,与读线程R一起进行握手过程,握手成功后,杀死写线程W2,唤醒写线程W,回到断网前的状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110053661.7A CN102111419B (zh) | 2011-03-07 | 2011-03-07 | 一种基于消息中间件的客户端自动重连方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110053661.7A CN102111419B (zh) | 2011-03-07 | 2011-03-07 | 一种基于消息中间件的客户端自动重连方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102111419A true CN102111419A (zh) | 2011-06-29 |
CN102111419B CN102111419B (zh) | 2014-06-25 |
Family
ID=44175449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110053661.7A Active CN102111419B (zh) | 2011-03-07 | 2011-03-07 | 一种基于消息中间件的客户端自动重连方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102111419B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699450A (zh) * | 2013-12-20 | 2014-04-02 | 国云科技股份有限公司 | 一种Linux下的自适应组件间通信方法 |
CN105119927A (zh) * | 2015-09-07 | 2015-12-02 | 北京百度网讯科技有限公司 | 消息发送、接收方法及终端和消息发送系统 |
CN106657256A (zh) * | 2016-10-27 | 2017-05-10 | 乐视控股(北京)有限公司 | 资源获取的处理方法及装置 |
CN106888218A (zh) * | 2017-04-01 | 2017-06-23 | 网易(杭州)网络有限公司 | 消息处理方法、装置、客户端及服务端 |
CN107133302A (zh) * | 2017-04-28 | 2017-09-05 | 努比亚技术有限公司 | 实现数据一致性的方法、系统、终端及计算机可读存储介质 |
CN108012085A (zh) * | 2017-12-19 | 2018-05-08 | 腾讯科技(上海)有限公司 | 一种多媒体信息处理方法、服务器及存储介质 |
CN109379638A (zh) * | 2018-09-13 | 2019-02-22 | 武汉斗鱼网络科技有限公司 | 一种链接弹幕的方法及移动终端 |
CN109472893A (zh) * | 2018-09-18 | 2019-03-15 | 杭州的蓝科技有限公司 | 共享汽车的控制方法、装置、服务器及计算机可读存储介质 |
CN109710421A (zh) * | 2018-11-16 | 2019-05-03 | 深圳证券交易所 | 消息中间件的接收者异常处理方法、服务器及存储介质 |
CN110134525A (zh) * | 2019-03-25 | 2019-08-16 | 杭州比智科技有限公司 | 一种消息补偿方法及装置 |
CN112839106A (zh) * | 2021-02-25 | 2021-05-25 | 北京北信源软件股份有限公司 | 通信方法及装置、电子设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1863091A (zh) * | 2006-02-15 | 2006-11-15 | 华为技术有限公司 | 一种网络实体接口状态维护的方法 |
CN101814077A (zh) * | 2009-12-04 | 2010-08-25 | 四川川大智胜软件股份有限公司 | 一种基于oci 9的数据库访问中间件 |
-
2011
- 2011-03-07 CN CN201110053661.7A patent/CN102111419B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1863091A (zh) * | 2006-02-15 | 2006-11-15 | 华为技术有限公司 | 一种网络实体接口状态维护的方法 |
CN101814077A (zh) * | 2009-12-04 | 2010-08-25 | 四川川大智胜软件股份有限公司 | 一种基于oci 9的数据库访问中间件 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699450A (zh) * | 2013-12-20 | 2014-04-02 | 国云科技股份有限公司 | 一种Linux下的自适应组件间通信方法 |
CN103699450B (zh) * | 2013-12-20 | 2017-02-15 | 国云科技股份有限公司 | 一种Linux下的自适应组件间通信方法 |
CN105119927A (zh) * | 2015-09-07 | 2015-12-02 | 北京百度网讯科技有限公司 | 消息发送、接收方法及终端和消息发送系统 |
CN106657256A (zh) * | 2016-10-27 | 2017-05-10 | 乐视控股(北京)有限公司 | 资源获取的处理方法及装置 |
CN106888218A (zh) * | 2017-04-01 | 2017-06-23 | 网易(杭州)网络有限公司 | 消息处理方法、装置、客户端及服务端 |
CN107133302A (zh) * | 2017-04-28 | 2017-09-05 | 努比亚技术有限公司 | 实现数据一致性的方法、系统、终端及计算机可读存储介质 |
CN108012085A (zh) * | 2017-12-19 | 2018-05-08 | 腾讯科技(上海)有限公司 | 一种多媒体信息处理方法、服务器及存储介质 |
CN108012085B (zh) * | 2017-12-19 | 2020-07-14 | 腾讯科技(上海)有限公司 | 一种多媒体信息处理方法、服务器及存储介质 |
CN109379638A (zh) * | 2018-09-13 | 2019-02-22 | 武汉斗鱼网络科技有限公司 | 一种链接弹幕的方法及移动终端 |
CN109379638B (zh) * | 2018-09-13 | 2021-01-01 | 武汉斗鱼网络科技有限公司 | 一种链接弹幕的方法及移动终端 |
CN109472893A (zh) * | 2018-09-18 | 2019-03-15 | 杭州的蓝科技有限公司 | 共享汽车的控制方法、装置、服务器及计算机可读存储介质 |
CN109710421A (zh) * | 2018-11-16 | 2019-05-03 | 深圳证券交易所 | 消息中间件的接收者异常处理方法、服务器及存储介质 |
CN109710421B (zh) * | 2018-11-16 | 2020-12-08 | 深圳证券交易所 | 消息中间件的接收者异常处理方法、服务器及存储介质 |
CN110134525A (zh) * | 2019-03-25 | 2019-08-16 | 杭州比智科技有限公司 | 一种消息补偿方法及装置 |
CN112839106A (zh) * | 2021-02-25 | 2021-05-25 | 北京北信源软件股份有限公司 | 通信方法及装置、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102111419B (zh) | 2014-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102111419B (zh) | 一种基于消息中间件的客户端自动重连方法 | |
CN107800621B (zh) | 一种支持多种接入协议的新型智能家居网关 | |
KR102208935B1 (ko) | 데이터 교환을 위한 컨텍스트를 설정하는 http 프로토콜을 통한 메시징 api | |
US7738887B2 (en) | Voice instant messaging between mobile and computing devices | |
US10637960B2 (en) | Method for bridging publish/subscribe brokers for guaranteed low-latency delivery | |
CN103064391B (zh) | 基于TCP/IP协议及Linux网络编程的数控系统远程DNC控制方法 | |
CN107360177B (zh) | 一种基于udp的报文传输方法及装置 | |
EP3331197A1 (en) | A method and system for monitoring a connection status of a device | |
CN103096271A (zh) | 信息推送系统和信息推送方法 | |
CN102611642A (zh) | 处理异步消息的系统及其发送消息、监听处理任务的方法 | |
CN105208043A (zh) | 外网代理模块、内网代理模块、数据传输方法及系统 | |
CN102025515A (zh) | 基于文件目录的文件传输方法及其装置和系统 | |
CN102868759B (zh) | 服务器控制浏览器界面数据刷新的系统及其方法 | |
US8650313B2 (en) | Endpoint discriminator in network transport protocol startup packets | |
CN105515936A (zh) | 消息通信的方法、服务器和系统 | |
CN102638418A (zh) | 一种即时通信中数据传输的方法、客户端和系统 | |
CN105721274A (zh) | 一种多种即时通讯的融合方法及装置 | |
KR100942694B1 (ko) | P2P(Peer to Peer)를 이용하는 협업 시스템및 그 방법 | |
CN110417875A (zh) | 一种云服务器之间的对接方法、系统、设备及存储介质 | |
CN106331051A (zh) | 文件传输方法和系统以及接收文件装置、发送文件装置 | |
CN104270255A (zh) | 一种基于linx进程的节点间通信模块及方法 | |
CN113259404B (zh) | 基于tcp/ip协议的工业通信中间件及其使用方法 | |
CN101075955B (zh) | 一种浏览器和即时通讯器同时访问网络的方法和装置 | |
KR101328028B1 (ko) | 세션 기반 메시지 전송 시스템 및 그 방법 | |
CN103297455A (zh) | 浏览器间的连接共享方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |