CN103856440B - 一种基于分布式总线的消息处理方法、服务器和系统 - Google Patents
一种基于分布式总线的消息处理方法、服务器和系统 Download PDFInfo
- Publication number
- CN103856440B CN103856440B CN201210499433.7A CN201210499433A CN103856440B CN 103856440 B CN103856440 B CN 103856440B CN 201210499433 A CN201210499433 A CN 201210499433A CN 103856440 B CN103856440 B CN 103856440B
- Authority
- CN
- China
- Prior art keywords
- session
- client
- queue
- described client
- message processing
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 69
- 238000012545 processing Methods 0.000 claims abstract description 72
- 230000008569 process Effects 0.000 claims abstract description 32
- 230000002159 abnormal effect Effects 0.000 claims description 8
- 230000005540 biological transmission Effects 0.000 claims description 8
- 230000011664 signaling Effects 0.000 claims description 4
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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
- H04L47/52—Queue scheduling by attributing bandwidth to queues
- H04L47/522—Dynamic queue service slot or variable bandwidth allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于分布式总线的消息处理方法、服务器和系统,属于数据处理技术领域。所述方法包括:接收来自客户端的请求数据包,并将请求数据包存入输入消息队列中;从输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的请求数据包,并采用空闲的消息处理线程分别对选取的请求数据包进行处理,得到应答数据包;将应答数据包发送给客户端。本发明通过使用队列来存放来自客户端的请求数据包,根据空闲的消息处理线程的多少,从输入消息队列队首开始选取相等数量的请求数据包进行处理,避免了在消息处理线程满负荷的情况下,仍对接收到的请求数据包立刻进行处理,而造成的额外负荷以及数据丢失,从而提高了处理效率和整体性能。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种基于分布式总线的消息处理方法、服务器和系统。
背景技术
随着网络技术的发展,网络应用的种类越来越多,网络应用中客户端通常会通过RPC(RemoteProcedureCallProtocol,远程过程调用协议)向远端服务器请求相应的服务。
RPC是一种通过网络从远程计算机程序上请求服务的协议。客户端通过RPC从服务器调用服务过程大致如下:客户端与服务器建立连接后,调用RPC接口函数向服务器发送携带有进程参数的调用信息,然后等待应答消息;服务器通过相应的服务器接口函数接收上述调用信息后,获得该调用信息中的进程参数,调用进程执行操作,并将操作结果作为应答消息返回给客户端,完成调用。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
服务器在接收到调用信息就立即开始处理,在面对海量用户接入的情况时,由于需要处理的数据量过大,而服务器的处理能力有限,这样就增加了服务器的负载,降低了系统的工作能力,同时还可能造成调用信息丢失。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种基于分布式总线的消息处理方法、服务器和系统。所述技术方案如下:
一方面,本发明实施例提供了一种基于分布式总线的消息处理方法,所述方法包括:
接收来自客户端的请求数据包,并将所述请求数据包存入输入消息队列中;
从所述输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的所述请求数据包,并采用所述空闲的消息处理线程分别对选取的所述请求数据包进行处理,得到应答数据包;
将所述应答数据包发送给所述客户端;
所述将所述应答数据包发送给所述客户端包括:将所述消息处理线程输出的应答数据包写入输出消息队列,将所述输出消息队列中的应答数据包通过发送模块发送给客户端;
每个所述消息处理线程输出的应答数据包写入唯一对应的输出消息队列。
其中,所述接收来自客户端的请求数据包,包括:
与所述客户端建立连接,并将建立连接后的所述客户端标记为连接状态;
与处于连接状态的所述客户端建立会话并将建立会话后的所述客户端标记为会话状态,以接收处于会话状态的所述客户端发送的请求数据包。
进一步地,所述与处于连接状态的所述客户端建立会话之前,所述方法还包括:
判断是否有会话处于空闲状态;
若有会话处于空闲状态,则与处于连接状态的所述客户端建立会话;否则,让所述客户端排队等待空闲的会话,并将排队等待的所述客户端标记为会话排队状态。
进一步地,所述方法还包括:
当处于会话状态的所述客户端异常断开时,将与异常断开的所述客户端对应的会话变为保护状态。
进一步地,在所述判断是否有会话处于空闲状态之前,所述方法还包括:
判断是否有与处于连接状态的所述客户端对应的处于保护状态的会话,若有,则直接与处于连接状态的客户端建立会话。
进一步地,所述方法还包括:
在收到处于连接状态的所述客户端的尝试会话请求时,若所述客户端已存在进行中的会话,则断开与所述进行中的会话对应的旧连接,并让所述会话与新连接关联。
其中,所述请求数据包为基于二进制通信协议的数据包。
进一步地,所述请求数据包的包头的格式为:
len | chksum | encrypt+compress | uin | cmd | seqno | body | sockid | srcip |
其中,len表示包长,checksum表示校验和,encrypt+compress表示加密和加压,uin表示客户端唯一标识符,cmd表示命令字,seqno表示请求数据包序列号,body表示包头主体,sockid表示连接状态标识,srcip表示源IP地址。
其中,所述方法还包括:
判断是否能够提供所述请求数据包中请求的服务;
若不能提供所述请求数据包中请求的服务,则转发所述请求数据包。
另一方面,本发明实施例还提供了一种基于分布式总线的服务器,所述服务器包括:
接收模块,用于接收来自客户端的请求数据包,并将所述请求数据包存入输入消息队列中;
存储模块,用于存储所述输入消息队列;
消息处理模块,用于从所述输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的所述请求数据包,并采用所述空闲的消息处理线程分别对选取的所述请求数据包进行处理,得到应答数据包;
发送模块,用于将所述应答数据包发送给所述客户端;
所述发送模块用于,
将各个所述消息处理线程得到的所述应答数据包分别存放在所述消息处理线程对应的输出消息队列中;
从所述输出队列中读取所述应答数据包并发送给所述客户端;
相应地,所述存储模块还用于,存储所述输出消息队列;
每个所述消息处理线程输出的应答数据包写入唯一对应的输出消息队列。
其中,所述接收模块,包括:
连接建立单元,用于与所述客户端建立连接,并将建立连接后的所述客户端标记为连接状态;
会话建立单元,用于与处于连接状态的所述客户端建立会话并将建立会话后的所述客户端标记为会话状态,以接收处于会话状态的所述客户端发送的请求数据包。
进一步地,所述会话建立单元用于,
判断是否有会话处于空闲状态;
若有会话处于空闲状态,则与处于连接状态的所述客户端建立会话;否则,让所述客户端排队等待空闲的会话,并将排队等待的所述客户端标记为会话排队状态。
进一步地,所述会话建立单元还用于,
当处于会话状态的所述客户端异常断开时,将与异常断开的所述客户端对应的会话变为保护状态。
进一步地,所述会话建立单元还用于,
判断是否有与处于连接状态的所述客户端对应的处于保护状态的会话,若有,则直接与处于连接状态的客户端建立会话。
进一步地,所述会话建立单元还用于,
在收到处于连接状态的所述客户端的尝试会话请求时,若所述客户端已存在进行中的会话,则断开与所述进行中的会话对应的旧连接,并让所述会话与新连接关联。
其中,所述服务器还包括:
设置模块,用于设置最大连接数和最大会话数,所述最大连接数是指与所述客户端之间可以同时建立的连接的数量的最大值,所述最大会话数是指与所述客户端之间可以同时进行的会话的数量的最大值。
另一方面,本发明实施例还提供了一种基于分布式总线的消息处理系统,所述系统包括总线和至少一个如上所述的服务器,所述服务器通过所述总线连接。
本发明实施例提供的技术方案带来的有益效果是:
通过使用队列来存放来自客户端的请求数据包,根据空闲的消息处理线程的多少,从输入消息队列队首开始选取相等数量的请求数据包进行处理,避免了对接收到的请求数据包立刻进行处理,而造成的额外负荷以及数据丢失,从而提高了处理效率和整体性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的基于分布式总线的消息处理方法流程图;
图2是本发明实施例二提供的基于分布式总线的消息处理方法流程图;
图3是本发明实施例二提供的与客户端建立会话方法流程图;
图4是本发明实施例三提供的基于分布式总线的服务器结构示意图;
图5是本发明实施例四提供的基于分布式总线的服务器结构示意图;
图6是本发明实施例五提供的基于分布式总线的消息处理系统结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
为了便于理解本发明实施例,下面先简单介绍分布式总线系统的基本架构。分布式总线系统包括多个分布式总线以及通过该分布式总线连接的多个网络节点,各网络节点之间可以以消息的形式通过分布式总线实现交互,网络节点通常为服务器。
实施例一
本发明实施例提供了一种基于分布式总线的消息处理方法,参见图1,该方法包括:
步骤101:接收来自客户端的请求数据包,并将请求数据包存入输入消息队列中。
具体地,该客户端安装在用户终端上。用户终端包括但不限于PC(PersonalComputer,个人计算机)、PDA(PersonalDigitalAssistant,个人数字助理)、智能手机等等。
步骤102:从输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的请求数据包,并采用空闲的消息处理线程分别对选取的请求数据包进行处理,得到应答数据包。
步骤103:将应答数据包发送给客户端。
本发明实施例通过使用队列来存放来自客户端的请求数据包,根据空闲的消息处理线程的多少,从输入消息队列队首开始选取相等数量的请求数据包进行处理,避免了在消息处理线程负荷重甚至满负荷的情况下,仍对接收到的请求数据包立刻进行处理,而造成的额外负荷以及数据丢失,从而提高了处理效率和整体性能。
实施例二
本发明实施例提供了一种基于分布式总线的消息处理方法,参见图2,该方法包括:
步骤200:对服务器进行初始配置。
具体地,配置的内容包括但不限于:服务器模式、服务器名称、服务器的ip地址、最大连接数、最大会话数、输入消息队列标识符、输入消息队列大小、消息处理线程池大小、输出消息队列标识符和输出消息队列大小等。
其中,服务器模式包括本地模式和网络模式,与客户端类型相对应,本地模式的服务器接入的客户端为本地进程,而网络模式下的服务器接入的客户端为非本地进程。特别地,本地模式时,服务器的IP地址通常为127.0.0.1。
最大连接数是指,服务器与客户端之间可以同时建立的连接的数量的最大值。当服务器与客户端之间同时建立的连接的数量达到最大连接数时,将无法建立新的连接。
最大会话数是指,服务器与客户端之间可以同时进行的会话的数量的最大值。当同时建立的会话状态数量达到最大会话数时,请求会话的客户端将进入会话排队状态。
需要说明的是,该步骤可以根据人工配置信息来进行,也可以作为服务器的默认配置,当作为默认配置时,该步骤为可选步骤。
步骤201:服务器与客户端建立连接,并将建立连接后的客户端标记为连接状态。
具体地,该步骤包括:
服务器收到客户端发起的建立基于TCP(TransmissionControlProtocol,传输控制协议)或者UDP(UserDatagramProtocol,用户数据报协议)的连接状态的请求;当有空闲连接时,与上述客户端建立连接。
在建立连接后,客户端和服务器之间通过周期性传输问候数据包来保持连接状态,当一段时间内未收到该客户端发送的问候数据包时,断开与该客户端的连接。
其中,客户端的类型包括本地进程或者非本地进程。如果客户端是非本地进程备,则在服务器和客户端之间通过总线传输消息。
步骤202:与处于连接状态的客户端建立会话并将建立会话后的客户端标记为会话状态,以接收处于会话状态的客户端发送的请求数据包。
优选地,该请求数据包为基于二进制通信协议的数据包。
上述请求数据包的包头的格式为:
len | chksum | encrypt+compress | uin | cmd | seqno | body | sockid | srcip |
其中,len表示包长,checksum表示校验和,encrypt+compress表示加密和加压,uin表示客户端唯一标识符,cmd表示命令字,每种命令字代表客户端请求的一种服务,seqno表示请求数据包的序列号,用于对客户端发出的数据包的顺序进行标识,body表示包头主体,与cmd类型对应,即表示客户端请求的服务与需要该服务处理的数据,sockid表示连接状态标识,srcip表示源IP地址,即客户端所在的用户终端的ip地址。
下表为上述字段的说明:
字段 | 类型 | 说明 |
len | int(32) | 包长 |
checksum | short(16) | 校验和 |
encrypt+compress | char(8) | 加密和加压 |
uin | int(32) | 客户端唯一标识 |
cmd | short(16) | 命令字 |
seqno | short(16) | 请求数据包的序列号 |
body | 变长 | 包头主体 |
sockid | short(16) | 连接状态标识 |
srcip | int(32) | 源IP地址 |
本发明实施例采用这种基于二进制的轻量消息协议,减少了链路的开销以及处理消耗。
具体地,参见图3,该步骤202包括:
步骤2021:接收来自处于连接状态的客户端的尝试会话数据包。
步骤2022:判断是否有会话处于空闲状态;若有会话处于空闲状态,执行步骤2023,否则,执行步骤2024。
步骤2023:与处于连接状态的客户端建立会话。
步骤2024:让该客户端排队等待空闲的会话,并将排队等待的客户端标记为会话排队状态。并当有会话处于空闲状态时,优先与排在队首的客户端进行会话。
进一步地,如果处于会话状态的客户端异常断开,则将与异常断开的客户端对应的会话变为保护状态。
相应地,判断是否有会话处于空闲状态之前,该方法还包括:
判断是否有与处于连接状态的客户端对应的处于保护状态的会话,若有,则直接与处于连接状态的客户端建立会话。
进一步地,与处于连接状态的客户端建立会话时,若客户端已存在进行中的会话,则断开与会话对应的旧连接,并让会话与新连接关联。
上述连接状态和会话状态的管理,使得在大量客户端接入时更加有序,提高了系统的管理和维护性能。
步骤203:向输入消息队列中写入上述请求数据包。
容易知道,当输入消息队列满时,则无法向输入消息队列中写入请求数据包,此时写入的请求数据包会被丢弃。
其中,输入消息队列的大小根据实际情况中客户端的多少,消息处理模块工作处理速度等因素来决定,尽量避免因输入消息队列输入消息队列过小而造成请求数据包无法写入的问题。输入消息队列中可放入任意小于消息队列大小的消息数据。
步骤204:从输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的请求数据包,并采用空闲的消息处理线程分别对选取的请求数据包进行处理,得到应答数据包。
具体地,采用空闲的消息处理线程分别对选取的请求数据包进行处理,包括:
根据二进制通信协议解封请求数据包,得到包头;查看包头中的字段,包头中的字段包括:包长、校验和、加密和加压、客户端唯一标识符、命令字、请求数据包的序列号、包头主体、连接状态标识、和源IP地址;根据命令字字段为客户端提供相应的服务。
进一步地,当无法处理请求数据包时,即消息处理线程无法提供客户端所请求的服务时,将数据包交由相连的接收模块。
进一步地,消息处理模块从输入消息队列读取一个请求数据包后,接收模块将新的请求数据包写入输入消息队列。值得说明的是,由于数据处理的时间远大于数据的读写,因而输入消息队列会长期处于队满状态,那么这样的设计会使得消息处理有序化,减轻了消息处理线程的负荷,提高了数据处理的效率。
步骤205:将消息处理线程输出的应答数据包写入输出消息队列。
优选地,每个消息处理线程输出的应答数据包写入唯一对应的输出消息队列。这样做,避免了多个消息处理线程输出至一个输出消息队列时的加锁设计。
步骤206:将输出消息队列中的应答数据包通过发送模块发送给客户端。
本发明实施例通过使用队列来存放来自客户端的请求数据包,根据空闲的消息处理线程的多少,从输入消息队列队首开始选取相等数量的请求数据包进行处理,避免了在消息处理线程负荷重甚至满负荷的情况下,仍对接收到的请求数据包立刻进行处理,而造成的额外负荷以及数据丢失,从而提高了处理效率和整体性能。
实施例三
本发明实施例提供了一种基于分布式总线的服务器,参见图4,该服务器包括:
接收模块301,用于接收来自客户端的请求数据包,并将请求数据包存入输入消息队列中;
存储模块302,用于存储输入消息队列;
消息处理模块303,用于从输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的请求数据包,并采用空闲的消息处理线程分别对选取的请求数据包进行处理,得到应答数据包;
发送模块304,用于将应答数据包发送给客户端。
本发明实施例通过使用队列来存放来自客户端的请求数据包,根据空闲的消息处理线程的多少,从输入消息队列队首开始选取相等数量的请求数据包进行处理,避免了在消息处理线程负荷重甚至满负荷的情况下,仍对接收到的请求数据包立刻进行处理,而造成的额外负荷以及数据丢失,从而提高了处理效率和整体性能。
实施例四
本发明实施例提供了一种基于分布式总线的服务器,参见图5,该服务器包括:
接收模块2,用于接收来自客户端的请求数据包,并将请求数据包存入输入消息队列中;
存储模块3,用于存储输入消息队列31;
消息处理模块4,用于从输入消息队列的队首开始选取与空闲的消息处理线程数量相等的请求数据包,并采用空闲的消息处理线程分别对选取的请求数据包进行处理,得到应答数据包;
发送模块5,用于将应答数据包发送给客户端。
其中,接收模块2,包括:
连接建立单元,用于与客户端建立连接,并将建立连接后的客户端标记连接状态;
会话建立单元,用于与处于连接状态的客户端建立会话并将建立会话后的客户端标记为会话状态,以接收处于会话状态的客户端发送的请求数据包。
进一步地,会话建立单元用于,判断是否有会话处于空闲状态;
若有会话处于空闲状态,则与处于连接状态的客户端建立会话;否则,让客户端排队等待空闲的会话,并将排队等待的客户端标记为会话排队状态。
进一步地,会话建立单元还用于,当处于会话状态的客户端异常断开时,将与异常断开的客户端对应的会话变为保护状态。
进一步地,会话建立单元还用于,
判断是否有与处于连接状态的客户端对应的处于保护状态的会话,若有,则直接与处于连接状态的客户端建立会话。
进一步地,会话建立单元还用于,
与处于连接状态的客户端建立会话时,若客户端已存在进行中的会话,则断开与会话对应的旧连接,并让会话与新连接关联。
其中,发送模块用于,
将各个消息处理线程得到的应答数据包分别存放在消息处理线程对应的输出消息队列32中;
从输出队列中32读取应答数据包并发送给客户端;
相应地,存储模块还用于,存储输出消息队列32。
进一步地,服务器还包括:
设置模块,用于设置最大连接数和最大会话数,最大连接数是指与客户端之间可以同时建立的连接的数量的最大值,最大会话数是指与客户端之间可以同时进行的会话的数量的最大值。
两种消息队列均可放入任意小于消息队列大小的消息数据。
相应地,消息处理模块4包括用于从输入消息队列队首开始选取与空闲的消息处理线程数量相等的请求数据包的消息分发线程41和用于对选取的请求数据包进行处理的若干个消息处理线程43。消息处理线程43设于消息处理线程池42中;且每个消息处理线程43对应唯一一个输出消息队列32。
进一步地,依据实施例二中的配置生成一个可寻址的结构,客户端根据配置中的IP地址连接到对应的服务器。
本发明实施例通过使用队列来存放来自客户端的请求数据包,根据空闲的消息处理线程的多少,从输入消息队列队首开始选取相等数量的请求数据包进行处理,避免了在消息处理线程负荷重甚至满负荷的情况下,仍对接收到的请求数据包立刻进行处理,而造成的额外负荷以及数据丢失,从而提高了处理效率和整体性能。
实施例五
本发明实施例提供了一种基于分布式总线的消息处理系统,参见图6,上述总线系统包括总线和至少一个上述实施例三或四中的服务器;服务器通过总线连接。当系统中存在多个服务器时,至少一组接收模块和发送模块与另一个服务器的消息处理模块相连接。
当消息处理线程无法处理请求数据包时,将请求数据包交由相连的接收模块,由该接收模块交由其所处的服务器中消息处理模块处理后,由发送模块返回应答数据包。
本发明实施例通过使用队列来存放来自客户端的请求数据包,根据空闲的消息处理线程的多少,从输入消息队列队首开始选取相等数量的请求数据包进行处理,避免了在消息处理线程负荷重甚至满负荷的情况下,仍对接收到的请求数据包立刻进行处理,而造成的额外负荷以及数据丢失,从而提高了处理效率和整体性能。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (17)
1.一种基于分布式总线的消息处理方法,其特征在于,所述方法包括:
接收来自客户端的请求数据包,并将所述请求数据包存入输入消息队列中;
从所述输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的所述请求数据包,并采用所述空闲的消息处理线程分别对选取的所述请求数据包进行处理,得到应答数据包;
将所述应答数据包发送给所述客户端;
所述将所述应答数据包发送给所述客户端包括:将所述消息处理线程输出的应答数据包写入输出消息队列,将所述输出消息队列中的应答数据包通过发送模块发送给客户端;
每个所述消息处理线程输出的应答数据包写入唯一对应的输出消息队列。
2.根据权利要求1所述的方法,其特征在于,所述接收来自客户端的请求数据包,包括:
与所述客户端建立连接,并将建立连接后的所述客户端标记为连接状态;
与处于连接状态的所述客户端建立会话并将建立会话后的所述客户端标记为会话状态,以接收处于会话状态的所述客户端发送的请求数据包。
3.根据权利要求2所述的方法,其特征在于,所述与处于连接状态的所述客户端建立会话之前,所述方法还包括:
判断是否有会话处于空闲状态;
若有会话处于空闲状态,则与处于连接状态的所述客户端建立会话;否则,让所述客户端排队等待空闲的会话,并将排队等待的所述客户端标记为会话排队状态。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当处于会话状态的所述客户端异常断开时,将与异常断开的所述客户端对应的会话变为保护状态。
5.根据权利要求4所述的方法,其特征在于,在所述判断是否有会话处于空闲状态之前,所述方法还包括:
判断是否有与处于连接状态的所述客户端对应的处于保护状态的会话,若有,则直接与处于连接状态的客户端建立会话。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在收到处于连接状态的所述客户端的尝试会话请求时,若所述客户端已存在进行中的会话,则断开与所述进行中的会话对应的旧连接,并让所述会话与新连接关联。
7.根据权利要求1所述的方法,其特征在于,所述请求数据包为基于二进制通信协议的数据包。
8.根据权利要求7所述的方法,其特征在于,所述请求数据包的包头的格式为:
其中,len表示包长,checksum表示校验和,encrypt+compress表示加密和加压,uin表示客户端唯一标识符,cmd表示命令字,seqno表示请求数据包序列号,body表示包头主体,sockid表示连接状态标识,srcip表示源IP地址。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
判断是否能够提供所述请求数据包中请求的服务;
若不能提供所述请求数据包中请求的服务,则转发所述请求数据包。
10.一种基于分布式总线的服务器,其特征在于,所述服务器包括:
接收模块,用于接收来自客户端的请求数据包,并将所述请求数据包存入输入消息队列中;
存储模块,用于存储所述输入消息队列;
消息处理模块,用于从所述输入消息队列的队首开始,选取与空闲的消息处理线程数量相等的所述请求数据包,并采用所述空闲的消息处理线程分别对选取的所述请求数据包进行处理,得到应答数据包;
发送模块,用于将所述应答数据包发送给所述客户端;
所述发送模块用于,
将各个所述消息处理线程得到的所述应答数据包分别存放在所述消息处理线程对应的输出消息队列中;
从所述输出队列中读取所述应答数据包并发送给所述客户端;
相应地,所述存储模块还用于,存储所述输出消息队列;
每个所述消息处理线程输出的应答数据包写入唯一对应的输出消息队列。
11.根据权利要求10所述的服务器,其特征在于,所述接收模块,包括:
连接建立单元,用于与所述客户端建立连接,并将建立连接后的所述客户端标记为连接状态;
会话建立单元,用于与处于连接状态的所述客户端建立会话并将建立会话后的所述客户端标记为会话状态,以接收处于会话状态的所述客户端发送的请求数据包。
12.根据权利要求11所述的服务器,其特征在于,所述会话建立单元用于,
判断是否有会话处于空闲状态;
若有会话处于空闲状态,则与处于连接状态的所述客户端建立会话;否则,让所述客户端排队等待空闲的会话,并将排队等待的所述客户端标记为会话排队状态。
13.根据权利要求12所述的服务器,其特征在于,所述会话建立单元还用于,
当处于会话状态的所述客户端异常断开时,将与异常断开的所述客户端对应的会话变为保护状态。
14.根据权利要求13所述的服务器,其特征在于,所述会话建立单元还用于,
判断是否有与处于连接状态的所述客户端对应的处于保护状态的会话,若有,则直接与处于连接状态的客户端建立会话。
15.根据权利要求11所述的服务器,其特征在于,所述会话建立单元还用于,
在收到处于连接状态的所述客户端的尝试会话请求时,若所述客户端已存在进行中的会话,则断开与所述进行中的会话对应的旧连接,并让所述会话与新连接关联。
16.根据权利要求10所述的服务器,其特征在于,所述服务器还包括:
设置模块,用于设置最大连接数和最大会话数,所述最大连接数是指与所述客户端之间可以同时建立的连接的数量的最大值,所述最大会话数是指与所述客户端之间可以同时进行的会话的数量的最大值。
17.一种基于分布式总线的消息处理系统,其特征在于,所述系统包括总线和至少一个如权利要求10-16中任一项所述的服务器,所述服务器通过所述总线连接。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210499433.7A CN103856440B (zh) | 2012-11-29 | 2012-11-29 | 一种基于分布式总线的消息处理方法、服务器和系统 |
PCT/CN2013/087833 WO2014082562A1 (en) | 2012-11-29 | 2013-11-26 | Method, device, and system for information processing based on distributed buses |
US14/263,960 US9537786B2 (en) | 2012-11-29 | 2014-04-28 | Method, device, and system for information processing based on distributed buses |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210499433.7A CN103856440B (zh) | 2012-11-29 | 2012-11-29 | 一种基于分布式总线的消息处理方法、服务器和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103856440A CN103856440A (zh) | 2014-06-11 |
CN103856440B true CN103856440B (zh) | 2015-11-18 |
Family
ID=50827183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210499433.7A Active CN103856440B (zh) | 2012-11-29 | 2012-11-29 | 一种基于分布式总线的消息处理方法、服务器和系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9537786B2 (zh) |
CN (1) | CN103856440B (zh) |
WO (1) | WO2014082562A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105471722A (zh) * | 2015-12-31 | 2016-04-06 | 深圳前海微众银行股份有限公司 | 消息处理方法和装置 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101907422B1 (ko) * | 2012-02-10 | 2018-10-12 | 한국전자통신연구원 | 네트워크 애플리케이션 통합 개발장치, 그 통합 개발방법 및 그것을 이용하는 서버 |
CN105119981B (zh) * | 2015-07-23 | 2019-06-07 | 上海斐讯数据通信技术有限公司 | 一种处理报文的方法 |
CN105117230B (zh) * | 2015-08-31 | 2018-08-10 | 深圳神州数码云科数据技术有限公司 | 一种双端任务处理方法 |
CN105847181B (zh) * | 2016-03-10 | 2019-04-30 | 浙江大学 | 一种应用于输入队列交换机分布式调度算法的预测方法 |
WO2017165166A1 (en) * | 2016-03-21 | 2017-09-28 | Carrier Corporation | Intrusion security panel with remote assistance through simulated user interface |
CN107977275B (zh) * | 2017-12-05 | 2022-10-21 | 腾讯科技(深圳)有限公司 | 基于消息队列的任务处理方法及相关设备 |
CN109936593B (zh) * | 2017-12-15 | 2022-03-01 | 网宿科技股份有限公司 | 一种消息分发的方法和系统 |
CN108984285B (zh) * | 2018-06-28 | 2021-10-15 | 上海数据交易中心有限公司 | 一种数据碰撞流分析方法及装置、存储介质、终端 |
CN109819021B (zh) * | 2019-01-09 | 2021-10-22 | 网宿科技股份有限公司 | 业务后台及其异步处理业务请求的方法 |
CN110222075B (zh) * | 2019-04-25 | 2021-11-19 | 视联动力信息技术股份有限公司 | 一种响应数据查询的方法、视联网系统以及mserver系统 |
CN110297722B (zh) * | 2019-06-28 | 2021-08-24 | Oppo广东移动通信有限公司 | 线程任务通信方法及相关产品 |
CN110321213A (zh) * | 2019-07-08 | 2019-10-11 | 杭州港盛软件科技有限公司 | 一种请求处理方法、装置、设备及可读存储介质 |
WO2021130500A1 (en) * | 2019-12-23 | 2021-07-01 | Ultima Business Solutions Limited | A system and method for automated process orchestration |
CN113973093B (zh) * | 2020-07-24 | 2023-10-13 | 中移(苏州)软件技术有限公司 | 数据传输方法及装置、电子设备、可读存储介质 |
CN114691581A (zh) * | 2020-12-29 | 2022-07-01 | 深圳云天励飞技术股份有限公司 | 一种数据传输方法、装置、可读存储介质及终端设备 |
CN113835902B (zh) * | 2021-09-22 | 2023-12-05 | 抖音视界有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN115473866A (zh) * | 2022-09-14 | 2022-12-13 | 康键信息技术(深圳)有限公司 | 一种会话管理方法、系统、设备及存储介质 |
CN117234998B (zh) * | 2023-09-12 | 2024-06-07 | 中科驭数(北京)科技有限公司 | 一种多主机数据访问方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102387206A (zh) * | 2011-10-20 | 2012-03-21 | 镇江睿泰信息科技有限公司 | 一种Web服务并发请求合成方法及系统 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5329619A (en) * | 1992-10-30 | 1994-07-12 | Software Ag | Cooperative processing interface and communication broker for heterogeneous computing environments |
US6477586B1 (en) * | 1998-06-29 | 2002-11-05 | International Business Machines Corporation | Remote procedure calls in distributed systems |
US7676516B2 (en) * | 2002-10-15 | 2010-03-09 | Active-Base Ltd. | System and method for the optimization of database access in data base networks |
US7408883B2 (en) * | 2004-09-01 | 2008-08-05 | Nettest, Inc. | Apparatus and method for performing a loopback test in a communication system |
CN102025649A (zh) * | 2010-06-04 | 2011-04-20 | 西本新干线股份有限公司 | 企业服务总线的消息处理方法 |
CN102193779A (zh) * | 2011-05-16 | 2011-09-21 | 武汉科技大学 | 一种面向MPSoC的多线程调度方法 |
CN102262564A (zh) * | 2011-08-16 | 2011-11-30 | 天津市天祥世联网络科技有限公司 | 视频监控平台系统的线程池结构及实现方法 |
-
2012
- 2012-11-29 CN CN201210499433.7A patent/CN103856440B/zh active Active
-
2013
- 2013-11-26 WO PCT/CN2013/087833 patent/WO2014082562A1/en active Application Filing
-
2014
- 2014-04-28 US US14/263,960 patent/US9537786B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102387206A (zh) * | 2011-10-20 | 2012-03-21 | 镇江睿泰信息科技有限公司 | 一种Web服务并发请求合成方法及系统 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105471722A (zh) * | 2015-12-31 | 2016-04-06 | 深圳前海微众银行股份有限公司 | 消息处理方法和装置 |
CN105471722B (zh) * | 2015-12-31 | 2018-11-30 | 深圳前海微众银行股份有限公司 | 消息处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2014082562A1 (en) | 2014-06-05 |
US20140233584A1 (en) | 2014-08-21 |
CN103856440A (zh) | 2014-06-11 |
US9537786B2 (en) | 2017-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103856440B (zh) | 一种基于分布式总线的消息处理方法、服务器和系统 | |
WO2020077680A1 (zh) | 数据传输方法、系统以及代理服务器 | |
CN105159781B (zh) | 调节智能终端应用网速的方法、装置和智能终端 | |
CN100558109C (zh) | 基于会话初始协议的负载均衡实现方法及系统 | |
CN109327513B (zh) | 交互方法、装置及计算机可读存储介质 | |
CN108702486B (zh) | 一种低延时音视频传输方法、装置及计算机可读存储介质 | |
CN113259415B (zh) | 一种网络报文处理方法、装置及网络服务器 | |
CN101369987B (zh) | 一种建立通信通道的方法及装置 | |
CN101364976A (zh) | 一种建立通信通道的方法及装置 | |
CN103441937A (zh) | 组播数据的发送方法和接收方法 | |
CN110505244A (zh) | 远程隧道访问技术网关以及服务器 | |
CN103944979A (zh) | 一种消息推送方法、装置及系统 | |
CN103547339A (zh) | 一种文件上传方法、客户端和服务端 | |
CN110535811B (zh) | 远端内存管理方法及系统、服务端、客户端、存储介质 | |
CN105978606B (zh) | 蓝牙设备远程通信方法、蓝牙设备及客户端 | |
CN102137104A (zh) | 一种传输控制协议tcp长连接接入控制方法和装置 | |
CN108882262A (zh) | 设备状态同步方法、系统、智能终端及可读存储介质 | |
CN114024910A (zh) | 一种用于金融交易系统的极低延时可靠通讯系统及方法 | |
CN112398754B (zh) | 数据传输方法、装置、介质、电子设备及网络接入设备 | |
CN113965628A (zh) | 消息调度方法、服务器和存储介质 | |
CN107707546B (zh) | 一种报文复制方法及支持报文复制功能的新型网络适配器 | |
CN102263808B (zh) | 一种会话控制服务方法、装置和系统 | |
CN110417875A (zh) | 一种云服务器之间的对接方法、系统、设备及存储介质 | |
CN107241351A (zh) | 一种基于Redis的RPC通信方法 | |
CN101860544A (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231228 Address after: 518057 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 floors Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. Patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 2, 518000, East 403 room, SEG science and Technology Park, Zhenxing Road, Shenzhen, Guangdong, Futian District Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |
|
TR01 | Transfer of patent right |