CN102111419B - 一种基于消息中间件的客户端自动重连方法 - Google Patents

一种基于消息中间件的客户端自动重连方法 Download PDF

Info

Publication number
CN102111419B
CN102111419B CN201110053661.7A CN201110053661A CN102111419B CN 102111419 B CN102111419 B CN 102111419B CN 201110053661 A CN201110053661 A CN 201110053661A CN 102111419 B CN102111419 B CN 102111419B
Authority
CN
China
Prior art keywords
thread
client
message
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.)
Active
Application number
CN201110053661.7A
Other languages
English (en)
Other versions
CN102111419A (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.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
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 Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN201110053661.7A priority Critical patent/CN102111419B/zh
Publication of CN102111419A publication Critical patent/CN102111419A/zh
Application granted granted Critical
Publication of CN102111419B publication Critical patent/CN102111419B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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,回到断网前的状态。 
CN201110053661.7A 2011-03-07 2011-03-07 一种基于消息中间件的客户端自动重连方法 Active CN102111419B (zh)

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 CN102111419A (zh) 2011-06-29
CN102111419B true 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)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 努比亚技术有限公司 实现数据一致性的方法、系统、终端及计算机可读存储介质
CN108012085B (zh) * 2017-12-19 2020-07-14 腾讯科技(上海)有限公司 一种多媒体信息处理方法、服务器及存储介质
CN109379638B (zh) * 2018-09-13 2021-01-01 武汉斗鱼网络科技有限公司 一种链接弹幕的方法及移动终端
CN109472893A (zh) * 2018-09-18 2019-03-15 杭州的蓝科技有限公司 共享汽车的控制方法、装置、服务器及计算机可读存储介质
CN109710421B (zh) * 2018-11-16 2020-12-08 深圳证券交易所 消息中间件的接收者异常处理方法、服务器及存储介质
CN110134525A (zh) * 2019-03-25 2019-08-16 杭州比智科技有限公司 一种消息补偿方法及装置
CN112839106A (zh) * 2021-02-25 2021-05-25 北京北信源软件股份有限公司 通信方法及装置、电子设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
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的数据库访问中间件

Patent Citations (2)

* Cited by examiner, † Cited by third party
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的数据库访问中间件

Also Published As

Publication number Publication date
CN102111419A (zh) 2011-06-29

Similar Documents

Publication Publication Date Title
CN102111419B (zh) 一种基于消息中间件的客户端自动重连方法
EP2448206B1 (en) Method, system and device for transmitting video data
JP4740328B2 (ja) シンクサーバーを用いたメッセンジャー通知システム及びその方法
CN105635248B (zh) 一种tcp连接资源的释放方法及系统
CN103064391B (zh) 基于TCP/IP协议及Linux网络编程的数控系统远程DNC控制方法
US7738887B2 (en) Voice instant messaging between mobile and computing devices
EP3331197B1 (en) A method and system for monitoring a connection status of a device
KR102208935B1 (ko) 데이터 교환을 위한 컨텍스트를 설정하는 http 프로토콜을 통한 메시징 api
CN102611642A (zh) 处理异步消息的系统及其发送消息、监听处理任务的方法
CN103096271A (zh) 信息推送系统和信息推送方法
CN105791399B (zh) 多中继互联网大数据推送方法和系统
US20060265376A1 (en) Control method for server apparatus, control method for client apparatus, server apparatus, client apparatus, control program for server apparatus, control program for client apparatus and session control method
CN103139818A (zh) 一种aos中保持长连接的方法、系统、aoe、aog及终端
CN103516587A (zh) 即时通信客户端断线重连的方法和装置
CN105515936A (zh) 消息通信的方法、服务器和系统
KR100702704B1 (ko) 메신저를 이용한 알림 시스템 및 방법
TW201038004A (en) Wake up method and application thereof
CN102882708A (zh) 运维审计方法、装置及系统
CN110809262A (zh) 一种基于coap协议的物联网设备运维管理方法
CN107846609B (zh) 控制室数据实时传输方法、装置和系统
CN114125021B (zh) 一种基于Netty消息驱动的终端信息发布系统
CN113259404B (zh) 基于tcp/ip协议的工业通信中间件及其使用方法
CN104270255A (zh) 一种基于linx进程的节点间通信模块及方法
KR20090004318A (ko) P2P(Peer to Peer)를 이용하는 협업 시스템및 그 방법
WO2019023972A1 (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