CN110532088B - 连接处理方法、装置、计算机设备和存储介质 - Google Patents
连接处理方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN110532088B CN110532088B CN201910635872.8A CN201910635872A CN110532088B CN 110532088 B CN110532088 B CN 110532088B CN 201910635872 A CN201910635872 A CN 201910635872A CN 110532088 B CN110532088 B CN 110532088B
- Authority
- CN
- China
- Prior art keywords
- connection
- event
- target
- queue
- message
- 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
Images
Classifications
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- 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/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请涉及一种连接处理方法、装置、计算机设备和存储介质。所述方法包括:与第一设备建立第一连接;从多个候选连接集合中,确定第一连接对应的目标连接集合,各个候选连接集合对应有事件检测器;将第一连接加入到目标连接集合中;利用目标连接集合对应的目标事件检测器,检测目标连接集合中各个目标连接对应的消息事件;当检测到待处理的消息事件时,对待处理的消息事件进行处理。上述方法提高了连接对应的消息事件的响应速度。
Description
技术领域
本申请涉及计算机网络领域,特别是涉及一种连接处理方法、装置、计算机设备和存储介质。
背景技术
目前,客户端可以通过与服务器建立连接,以进行通信。例如,客户端可以与服务器建立长连接。TCP长连接是TCP连接的一种方式,在实时监控、集群推送、集群数据同步和负载均衡等方面得到了大量的应用。目前,当连接数量较多时,存在对连接对应的消息事件响应缓慢问题。
发明内容
基于此,有必要针对响应缓慢的问题,提供一种连接处理方法、装置、计算机设备和存储介质。
一种连接处理方法,所述方法包括:与第一设备建立第一连接;从多个候选连接集合中,确定所述第一连接对应的目标连接集合,各个所述候选连接集合对应有事件检测器;将所述第一连接加入到所述目标连接集合中;利用所述目标连接集合对应的目标事件检测器,检测所述目标连接集合中各个目标连接对应的消息事件;当检测到待处理的消息事件时,对所述待处理的消息事件进行处理。
在一些实施例中,所述方法还包括:创建对象,所述对象包括候选连接集合以及事件检测器,建立所述候选连接集合与所述事件检测器的对应关系;所述从多个候选连接集合中,确定所述第一连接对应的目标连接集合包括:获取各个所述候选连接集合对应的对象标识,根据所述对象标识创建对应的对象标识队列;从所述对象标识队列中获取目标对象标识,将所述目标对象标识对应的候选连接集合作为所述第一连接对应的目标连接集合。
在一些实施例中,所述方法还包括:创建事件分发器;所述获取各个所述候选连接集合对应的对象标识,根据所述对象标识创建对应的对象标识队列包括:所述事件分发器获取所述候选连接集合对应的对象标识,将各个所述对象标识加入到内置的队列中,得到对象标识队列。
在一些实施例中,所述与第一设备建立第一连接包括:用接入监听器监听连接请求;当监听到所述第一设备发送的第一连接请求时,所述接入监听器根据所述第一连接请求与所述第一设备建立连接。所述接入监听器将所述第一连接发送给所述事件分发器,以使得所述事件分发器将所述第一连接分发到对应的目标连接集合中。
在一些实施例中,所述从所述对象标识队列中获取目标对象标识之后,还包括:将所述目标对象标识重新加入到所述对象标识队列中。
在一些实施例中,所述候选连接集合为连接队列,所述创建对象,所述对象包括候选连接集合以及事件检测器,建立所述候选连接集合与所述事件检测器的对应关系包括:获取预先存储的连接处理类,所述连接处理类中定义了检测器生成方法以及连接队列创建方法;根据所述连接处理类生成多个连接处理对象,各个所述连接对象包括事件检测器以及连接队列,所述事件检测器是根据所述检测器生成方法生成的,所述候选连接队列是根据所述连接队列创建方法生成的。
在一些实施例中,所述创建对象,所述对象包括候选连接集合以及事件检测器,建立所述候选连接集合与所述事件检测器的对应关系包括:确定本端中内核的数量,根据所述内核的数量确定目标数量,创建所述目标数量的对象,所述目标数量与所述内核的数量成正相关关系。
在一些实施例中,所述当检测到待处理的消息事件时,对所述待处理的消息事件进行处理,包括:当所述目标事件检测器检测到通过所述第一连接发送的第一消息事件时,所述目标事件检测器调用对应的业务线程对所述第一消息事件进行处理。
在一些实施例中,所述方法还包括:所述目标事件检测器接收业务处理结果,所述业务处理结果是所述业务线程对所述第一消息事件进行处理得到的;将所述业务处理结果通过所述第一连接发送给所述第一设备。
一种连接处理装置,所述装置包括:连接建立模块,用于与所述第一设备建立第一连接;集合确定模块,用于从多个候选连接集合中,确定所述第一连接对应的目标连接集合,各个所述候选连接集合对应有事件检测器;加入模块,用于将所述第一连接加入到所述目标连接集合中;检测模块,用于利用所述目标连接集合对应的目标事件检测器,检测各个所述连接对应的消息事件;处理模块,用于当检测到待处理的消息事件时,对所述待处理的消息事件进行处理。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述连接处理方法的步骤。
一种存储有计算机程序的存储介质,所述计算机程序被一个或多个处理器执行时,使得一个或多个处理器执行上述连接处理方法的步骤。
上述连接处理方法、装置、计算机设备和存储介质,在连接建立后,将连接分发到其中的一个候选连接集合中,再由该候选连接集合对应的事件检测器检测连接的消息事件,由于包括了多个候选连接集合,每个候选连接集合都对应有事件检测器,因此可以将接收到的多个连接分成多个集合,分别对集合中的消息处理事件进行处理,提高了连接对应的消息事件的响应速度。
附图说明
图1为一些实施例中连接处理方法的应用环境图;
图2为一些实施例中连接处理方法的流程示意图;
图3为一些实施例中连接处理方法的流程示意图;
图4为一些实施例中创建对象,对象包括候选连接集合以及事件检测器,建立候选连接集合与事件检测器的对应关系的流程示意图;
图5为一些实施例中连接处理方法的流程示意图;
图6为一些实施例中连接处理方法的原理图;
图7为一些实施例中连接处理方法的时序图;
图8为一些实施例中连接处理装置的结构框图;
图9为一些实施例中计算机设备的内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的连接处理方法,可以应用于如图1所示的应用环境中。其中,终端102与服务器108通过网络进行通信。当终端102需要与服务器108进行通信时,可以向服务器108发送连接请求。服务器108接收终端102发送的连接请求,与终端102建立连接。当与终端102建立连接时,服务器可以是已经与多个其他终端建立了连接,并将连接分为多个候选连接集合,每个候选连接集合对应有事件检测器。例如,服务器108可以是已经与终端104和终端106建立了连接,并将建立的连接分发到对应的候选连接集合中。服务器108从多个候选连接集合中,确定与终端102建立的连接对应的目标连接集合,将与终端102建立的连接加入到目标连接集合中,并利用目标连接集合对应的目标事件检测器,检测目标连接集合中各个目标连接对应的消息事件,当检测到待处理的消息事件时,对待处理的消息事件进行处理。
其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器108可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一些实施例中,服务器108也可以与其他服务器建立连接。
在一些实施例中,如图2所示,提供了一种连接处理方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
S202,与第一设备建立第一连接。
具体地,第一设备可以是终端或者服务器的一种或多种。第一设备的数量可以有一个或多个,“多个”是指至少两个。可以根据第一设备发送的连接请求与第一设备建立连接。当然服务器也可以主动向第一设备发送连接请求,第一设备根据该连接请求,与服务器建立连接。
在一些实施例中,服务器与第一设备建立的连接可以是TCP(TransmissionControl Protocol,传输控制协议)连接。TCP是一种面向连接的、可靠的并基于字节流的传输层通信协议。TCP连接有TCP长连接和TCP短连接两种方式。TCP长连接是指在连接链路建立完成后,在链路空闲的时候并不结束这条链路,而是一直维持这条链路的连接,直至双方协商关闭连接。因此可以在一个连接上连续发送多个数据包,在连接保持期间,如果没有数据包发送,双方可以发链路检测包。TCP短连接是指在当一次数据交互完成后,就将连接中断,下次通信时重新建立连接。
在一些实施例中,服务器socket(套接字)端口可以采用非阻塞模式来接收终端发送的连接请求。socket连接是一个双向的通信连接,用于实现数据的交换。建立网络通信连接至少要一对socket端口。
在一些实施例中,服务器收到终端发送的连接请求,可以通过为该连接打上已连接的标识,以说明已建立连接。
S204,从多个候选连接集合中,确定第一连接对应的目标连接集合,各个候选连接集合对应有事件检测器。
具体地,候选连接集合包括一个或者多个连接。候选连接集合中的连接可以是动态变化的,例如,候选连接集合可以是队列(queue),一个队列可以对应一个候选连接集合。队列中的连接是不断变化的,可以有新的连接加入到队列中,也可以将队列中的连接移出。队列是一种特殊的线性表,是一种先进先出(FIFO,First Input First Output)的数据结构。例如,假设其中的一个队列已经包括了N个连接,当一个新的连接将加入该队列时,该队列就会变大,从而该队列中的连接有N+1个。目标连接集合指的是连接确定要加入的候选连接集合。例如,假设存在S1、S2和S3这三个候选连接集合,而且确认将连接加入到S1中,则此时S1被称为目标连接集合。
其中,事件检测器用于对连接中的消息事件进行检测,消息事件指的是从连接中读取消息的读事件或者通过连接发送消息的写事件中的至少一个。例如,事件检测器可以是Selector(选择器或者多路复用器)。Selector是Java NIO(java non-blocking IO,java非阻塞式IO)核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写、可接收或可连接状态,可以调用同一个线程来处理多个通道的就绪状态,因此可以实现单线程管理多个通道,也就是可以管理多个网络连接。Channel表示IO(Input/Output,输入/输出)源与目标之间打开的连接。
从多个候选连接集合中确定目标连接集合的方式可以是随机选取,可以是按顺序选取,也可以是选取包括的连接数量少的候选连接集合。
在一些实施例中,候选连接集合的数量可以与事件检测器的数量相同,这样一个候选连接集合可以对应一个事件检测器,即一个事件检测器负责对其中的一个候选连接集合中的连接的消息事件进行检测。
在一些实施例中,候选连接集合的数量可以大于事件检测器的数量,也就是说,一个事件检测器可以对应多个候选连接集合,即一个事件检测器负责对其中的多个候选连接集合中的连接的消息事件进行检测。
本申请实施例中,第一设备可以为多个,当为多个时,对于每个第一设备与服务器的连接,可以执行本申请实施例提供的方法,为每个连接分别确定对应的目标连接集合。
S206,将第一连接加入到目标连接集合中。
具体地,服务器确定连接对应的目标连接集合后,将该连接加入到目标连接集合。例如,对于假设存在的S1、S2和S3这三个候选连接集合,当确定目标连接集合为S1时,则可以将该连接加入到S1中。
在一些实施例中,目标连接集合可以是以队列的形式存在的,因此可以将连接加入到目标连接集合对应的队列中。
S208,利用目标连接集合对应的目标事件检测器,检测目标连接集合中各个目标连接对应的消息事件。
具体地,目标事件检测器指的是目标连接集合所对应的事件检测器。目标事件检测器可以对目标连接集合中的连接进行遍历,检测每个连接对应的消息事件。例如,假设目标连接集合是以队列的形式存在的,则目标事件检测器可以采用队列的遍历方式来遍历目标连接集合。
在一些实施例中,消息事件可以是读事件或写事件中的至少一个。
S210,当检测到待处理的消息事件时,对待处理的消息事件进行处理。
具体地,当检测到待处理的消息事件时,确定该消息事件为读事件还是写事件。当事件检测器检查到该消息事件为读事件时,事件检测器会调用相应的业务线程,对读事件进行处理;当事件检测器检查到该消息事件为写事件时,事件检测器会调用相应的业务线程,对写事件进行处理。
在一些实施例中,可以获取消息处理事件对应的业务方法,业务线程可以调用对应的业务方法对读事件或写事件中的一个进行处理,例如,对于银行服务器,业务方法可以为转账方法。
可以理解的,候选连接集合对应的事件检测器也对候选连接集合中各个连接对应的消息事件进行检测,当检测到候选连接集合中的连接存在对应的待处理的消息事件时,对待处理的消息事件进行处理。
上述连接处理方法,在连接建立后,将连接分发到其中的一个候选连接集合中,再由该候选连接集合对应的事件检测器检测连接的消息事件,由于包括了多个候选连接集合,每个候选连接集合都对应有事件检测器,因此可以将接收到的多个连接分成多个集合,分别对集合中的消息处理事件进行处理,提高了连接对应的消息事件的响应速度。
在一些实施例中,如图3所示,连接处理方法还可以包括:
S302,创建对象,所述对象包括候选连接集合以及事件检测器,建立候选连接集合与所述事件检测器的对应关系。
具体地,服务器创建相同数量的候选连接集合以及事件检测器,一个对象包括候选连接集合以及事件检测器,同一个对象的候选连接集合与事件检测器之间建立了对应的关系,例如是一一对应的关系。例如,服务器创建了3个候选连接集合SA、SB和SC以及3个事件检测器EA、EB和EC,然后SA与EA在同一个对象中,故SA与EA建立了对应关系,SB与EB在同一个对象中,故SB与EB建立了对应关系,SC与EC在同一个对象中,故SC与EC建立了对应关系,这样,候选连接集合与事件检测器是一一对应的。
再如图3所示,步骤S204,即从多个候选连接集合中,确定第一连接对应的目标连接集合可以包括:
S204A,获取各个候选连接集合对应的对象标识,根据对象标识创建对应的对象标识队列。
其中,对象标识是用于标识对象的,对象中可以包括连接集合以及事件检测器。对象标识用于唯一标识对象,即每个对象标识都是各不相同的。对象标识队列是包括对象标识的队列,用于对对象标识进行排序。该队列可以是具有双向特性的阻塞链表队列,该队列的大小可以是不变的或动态变化的其中之一。
具体地,服务端获取每个候选连接集合的对象标识,根据对象标识的数量,可以创建能够包括相应数量的对象标识的队列,该队列被称为对象标识队列,然后将对象标识一一插入到对象标识队列中。
S204B,从对象标识队列中获取目标对象标识,将目标对象标识对应的候选连接集合作为第一连接对应的目标连接集合。
具体的,目标对象标识是指连接确定要加入的候选连接集合的对象标识,对应的候选连接集合为目标连接集合。服务器可以按照队列的先进先出性质从对象标识队列中获取目标连接集合。例如,假设此时对象标识队列中包括MA、MB和MC3这3个对象标识,按照队列的先进先出性质,如果对象标识队列此时应该出队列的是对象标识MA,那么对象标识MA为目标对象标识,对象标识MA对应的候选连接集合为目标连接集合。
在一些实施例中,连接处理方法还可以包括:创建事件分发器。S204A即获取各个候选连接集合对应的对象标识,根据对象标识创建对应的对象标识队列包括:事件分发器获取各个候选连接集合对应的对象标识,将各个对象标识加入到内置的队列中,得到对象标识队列。
具体的,事件分发器用于分发连接,事件分发器可以内置有队列。对象标识在队列中的初始位置可以是预先设定的,也可以是任意的。当创建对象后,事件分发器获取各个对象对应的对象标识,将对象标识加入到队列中,生成对象标识队列。
在一些实施例中,步骤S202可以包括:利用接入监听器监听连接请求;当监听到第一设备发送的第一连接请求时,接入监听器根据第一连接请求与所述第一设备建立第一连接。
具体的,接入监听器用于对连接请求进行监听,接入监听器可以是Selector,用于监听通道的接收状态;接入监听器监听到第一设备发送的第一连接请求时,与第一设备建立连接,并可以通过给第一连接请求打上连接完成的标志,表示第一连接成功建立。
在一些实施例中,接入监听器将第一连接发送给事件分发器,以使得事件分发器将第一连接分发到对应的目标连接集合中。
具体的,接入监听器将第一连接发送给事件分发器,发送完成后,接入监听器内部可以删除连接事件。事件分发器可以将对象标识队列中排序在最前的对象标识作为目标对象标识,查找到目标对象标识对应的候选连接集合,即目标连接集合,将第一连接加入到目标连接集合中。
在一些实施例中,从对象标识队列中获取目标对象标识之后,还可以将目标对象标识重新加入到对象标识队列中。
具体的,如果获取的目标对象标识为MA,当连接被加入到目标连接集合当中后,可以将MA再加入到对象标识队列中,这样对象标识队列中的对象标识可以被重复循环的使用。对象标识的循环使用使得连接被均匀的加入到不同的连接集合中,连接集合对应有Selector,服务器通过多个Selector对连接进行遍历,加快了遍历连接的速度,极大的提升了服务器对接收事件的响应速度,使得服务器快速的响应更大的连接请求。
在一些实施例中,候选连接集合为连接队列,如图4所示,步骤S302即创建对象,对象包括候选连接集合以及事件检测器,建立候选连接集合与事件检测器的对应关系可以包括以下步骤:
S302A,获取预先存储的连接处理类,连接处理类中定义了检测器生成方法以及连接队列创建方法。
具体的,类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类中可以包括属性和方法。连接处理类是用来处理连接的类。服务器可以预先创建连接处理类,并在该连接处理类中封装事件检测器生成方法以及连接队列创建方法。
S302B,根据连接处理类生成多个连接处理对象,各个连接处理对象包括事件检测器以及候选连接集合。
具体的,事件检测器是根据检测器生成方法生成的,候选连接集合是根据连接队列创建方法生成的。服务器调用连接处理类新建多个连接处理类对象。在新建连接处理对象的同时,服务器会调用连接处理类中封装的事件检测器生成方法生成相应的事件检测器,同样的,服务器会调用连接处理类中封装的连接队列创建方法生成相应的候选连接集合。本申请实施例中,可以创建多个连接处理对象,因为每个连接处理对象都对应有连接队列,每个连接队列可以包括多个连接,因此服务器可以在短时间内接收巨大的连接请求,从而提升了服务器处理和保持连接的数量,提高了服务器的并发处理能力。
在一些实施例中,步骤S302即创建对象,对象包括候选连接集合以及事件检测器,建立候选连接集合与事件检测器的对应关系还可以包括:确定本端中内核的数量,根据内核的数量确定目标数量,创建目标数量的对象,目标数量与内核的数量成正相关关系。
具体的,对象的数量可以参照服务器的CPU(Central Processing Unit,中央处理器)内核数量进行设置。可以设置对象与CPU内核数量的对应关系。CPU内核数量与对象数量可以是正相关关系,CPU的内核数量越大,则对象的数量也大。例如,CPU的内核数量与对象的数量可以是相同的。对象的数量参照CPU核心数设置,能够充分利用CPU的多核计算能力,加快服务器的响应速度。
在一些实施例中,步骤S210即当检测到待处理的消息事件时,对待处理的消息事件进行处理包括:当目标事件检测器检测到通过第一连接发送的第一消息事件时,目标事件检测器调用对应的业务线程对第一消息事件进行处理。
具体的,服务器收到终端发送的消息事件,该消息事件可以是读事件,目标事件检测器首先可以调用读写处理器读取消息事件中的消息,再调用对应的业务线程对该消息事件进行处理。例如,假设终端102和服务器108之间存在一个连接C1,该连接存放在连接集合S1中,该连接集合对应的事件检测器为D1,此时终端102通过连接C1向服务器108发送消息,当事件检测器D1检测到消息时,确认为读事件,该事件检测器D1调用对应的业务线程对该读事件进行处理。
在一些实施例中,连接可以是长连接,可以预先建立线程池,线程池中包括多个业务线程,事件检测器可以调用其中的任意一个业务线程对读事件进行处理。其中线程池中的业务线程数量是小于服务器建立的连接的数量的。由于长连接中,一个连接上消息的发送或读取通常不是持续不断的,如果利用一个业务线程负责对一连接对应的消息进行处理,那么当连接数量大时,服务器中的业务线程数量会非常大。因此通过本实施例中的方式,即事件检测器检测连接集合中的连接对应的消息事件,当连接存在消息事件时,再调用线程池的业务线程对消息事件进行处理,可以实现一个业务线程处理多个长连接对应的消息事件,从而减少了处理消息事件所需要的业务线程数量,减轻了服务器的负载。
在一些实施例中,如图5所示,连接处理方法还可以包括:
S502,目标事件检测器接收业务处理结果,业务处理结果是业务线程对第一消息事件进行处理得到的。
具体的,业务线程将事件的处理结果发送给目标事件检测器。
S504,将业务处理结果通过第一连接发送给第一设备。
具体的,目标事件检测器将业务处理结果通过目标连接集合中对应的连接发送给终端。例如,假设终端102和服务器108之间的一个连接C2对应的目标连接集合为S2,目标事件检测器为D2,目标事件检测器D2检测到连接C2对应的读事件时,利用业务线程对读事件进行处理,得到业务处理结果,目标事件检测器D2通过目标连接集合S2中的连接C2,将业务处理结果发送给终端102。
参照图6举例说明连接处理方法,图6为一些实施例中连接处理方法的原理图。需要说明的是,本例中连接请求为TCP长连接请求,服务端的Socket采用的是非阻塞模式。
本实施例中,主Selector为连接进行监听的事件检测器,用于接入监听。KAcceptor可被称为接收器,是一个自定义的类对象,可以是上述的根据连接处理类创建的连接处理对象,内部封装了连接队列、Selector以及线程异步处理机制,内部实现了注册和监听机制。KAcceptor中的Selector为事件检测器,用于监听位于同一个KAcceptor的连接队列是否处于可读状态或可写状态至少一个。当一个连接被注册到一个KAcceptor后,连接的整个生命周期都会在KAcceptor中完成,直至连接中断。KAcceptor内置的连接队列用于接收并缓冲连接请求。读写处理器是一个用于处理读事件和写事件的对象。工作线程池的业务线程对消息事件的消息进行处理,预先写入了对消息处理的业务代码,调用对应的业务代码对消息进行处理。
线程池是由一个或多个具有缓存功能的业务线程组成的,可以是业务线程队列。事件分发器用于分发连接请求的一个封装对象,内置对象标识队列,该队列存放的是已经初始化的KAcceptor对象的标识,即对象标识,根据已经初始化的KAcceptor对象的标识可以得到KAcceptor对象在内存中的位置。事件分发器中内置的队列和KAcceptor内置的消息队列可以是具有双向特性的阻塞链表队列。
图6中只展示了3个KAcceptor接收器,但是本实例并不表示接收器的个数只能为3,接收器的个数可以是多个。
图7是本实例的时序图,结合图6和图7,可以得到本实施例的步骤包括:
1、注册接收事件。
具体的,服务端创建多个通道,并将这多个通道注册到同一个主选择器(也可以称为主selector)中,同时设置主选择器监听这多个通道的接收事件。例如,服务端的Socket创建多个通道,并将这N个通道注册到主Selector中,同时设置主Selector监听这多个通道的接收事件。
2、注册成功。
具体的,接收事件注册成功后,选择器返回注册成功信息。例如,主Selector向服务端的Socket接口返回接收事件注册成功信息。
3、监听接收事件。
具体的,主选择器开启对接收事件的监听。例如,主Selector启动对接收连接事件的监听。
4、发送TCP长连接请求。
具体的,客户端向服务端发送连接请求,即TCP长连接请求事件。
5、委托连接。
具体的,当主选择器监听到通道中存在接收事件时,即有新的连接请求时,主选择器建立连接,并将连接委托给对象标识队列,在连接委托成功后。例如,主Selector监听到有新的连接请求时,建立连接,并将连接委托给事件分发器。
6、连接委托完成。
具体的,事件分发器向主Selector返回连接分发完成的信息。
7、写入连接队列。
具体的,当确定了连接对应的目标连接集合,即连接对应的连接队列后,服务端可以将该连接写入到连接队列中。例如,事件分发器利用内置的队列,即对象标识队列,获取目标对象标识,用该目标对象标识从多个连接队列中确定连接对应的目标连接集合,将连接异步分发到目标连接队列中。
8、写入成功。
具体的,连接写入目标连接队列后,KAcceptor向事件分发器放写入成功信息。
9、注册读事件。
具体的,KAcceptor内置的独立线程向KAcceptor内置的Selector注册读事件。
10.客户端消息输出。
具体的,客户端向服务端发送消息。
11、读事件。
具体的,服务端利用目标连接集合对应的目标事件检测器,检测目标连接集合中各个连接对应的读事件。当服务端检测到待处理的读事件时,对待处理的读事件进行处理。例如,KAcceptor内置的Selector对对应的连接对列中的连接进行监听,当有监听到读事件时,调用读写处理器对消息事件进行读取,得到消息读取结果。
12、读完成。
具体的,当消息被读取完之后,读写处理器将消息读取结果返回给KAcceptor。
13、委托工作线程池异步处理消息。
具体的,KAcceptor向线程池发送委托工作线程池异步处理消息的请求。
14、委托结束。
具体的,线程池向KAcceptor返回委托结束信息。
15、启用线程。
具体的,线程池启用缓存业务线程。
16、异步调用业务方法。
具体的,业务线程异步调用处理消息读取结果的业务方法,对消息读取结果进行处理。
17、数据返回。
具体的,业务方法处理完消息读取结果后将业务处理结果返回给业务线程。
18、注册写事件。
具体的,业务线程向Selector注册写事件。
19、写事件。
具体的,服务端利用目标连接集合对应的目标事件检测器,检测目标连接集合中各个连接对应的写事件。当服务端检测到待处理的写事件时,对待处理的写事件进行处理。例如,KAcceptor内置的Selector对对应的连接对列中的连接进行监听,当有监听到写事件时,调用读写处理器对写事件进行处理。
20、结果返回客户端。
具体的,目标事件检测器接收业务处理结果,将该业务处理结果通过对应的连接发送给终端。例如,Selector将业务处理结果返回给客户端。
21、写完成。
具体的,写事件处理完成后,读写处理向KAcceptor返回写完成信息。
在本实施例中,KAcceptor数量可以参照CPU核心数设置,充分利用CPU的多核计算能力。
在本实施例中,由于每个KAcceptor拥有独立的消息队列,服务器可以在短时间内接收巨大的连接请求,由队列中的业务线程并发处理。
由于Selector进行监听时采用的是事件遍历策略,因此消息队列越长,Selector遍历的事件就会越长。本实施例中,通过事件分发器内置的队列,将TCP长连接循环依次加入到多个KAcceptor消息队列中,因此本实施例可以将连接均匀分布在不同的消息队列中,由不同的Selector来遍历消息队列,进而降低了主Selector响应事件数量,可以极大的提升主Selector对接入事件的响应速度,快速的响应更大的连接请求。当CPU负荷比较高的时候可以缓冲很多请求,不中断,缓冲大量的长连接。本实施例的连接处理方法可以轻松实现过万的长连接请求。本实施例可以应用于实时监控当中,例如,可以应用于车商云的实时监控系统中,实现对车商云的实时监控。
应该理解的是,虽然本申请实施例的各个流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,本申请实施例的各个流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一些实施例中,如图8所示,提供了一种连接处理装置,该装置包括:连接建立模块802、集合确定模块804、加入模块806、检测模块808和处理模块810,其中:
连接建立模块802,用于与第一设备建立第一连接。
集合确定模块804,用于从多个选连连接集合中,确定第一连接对应的目标连接集合,各个候选连接集合对应有事件检测器。
加入模块806,用于将第一连接加入到目标连接集合中。
检测模块808,用于利用目标连接集合对应的目标事件检测器,检测各个连接对应的消息事件。
处理模块810,用于当检测到待处理的消息事件时,对待处理的消息事件进行处理。
在一些实施例中,连接处理装置还包括:对象创建模块,用于创建对象,所述对象包括候选连接集合以及事件检测器,建立所述候选连接集合与所述事件检测器的对应关系。
集合确定模块804包括:
对象标识队列创建单元,用于获取各个候选连接集合对应的对象标识,根据对象标识创建对应的对象标识队列;
目标连接集合得到单元,用于从对象标识队列中获取目标对象标识,将目标对象标识对应的候选连接集合作为第一连接对应的目标连接集合。
在一些实施例中,连接处理装置还包括:
事件分发器创建模块:用于创建事件分发器。
对象标识队列创建单元用于:利用事件分发器获取候选连接集合对应的对象标识,将各个对象标识加入到内置的队列中,得到对象标识队列。
在一些实施例中,连接建立模块802包括:
连接监听单元:用于利用接入监听器监听连接请求;
连接建立单元:用于当监听到第一设备发送的第一连接请求时,利用接入监听器根据第一连接请求与第一设备建立连接。
在一些实施例中,连接处理装置还包括:连接分发模块:用于利用接入监听器将第一连接发送给事件分发器,以使得事件分发器将第一连接分发到对应的目标连接集合中。
在一些实施例中,连接处理装置还包括:对象标识重新加入模块,用于将目标对象标识重新加入到对象标识队列中。
在一些实施例中,对象创建模块包括:
连接处理类获取单元,用于获取预先存储的连接处理类,连接处理类中定义了检测器生成装置以及连接队列创建装置;
对象创建单元,根据连接处理类生成多个连接处理对象,各个连接对象包括事件检测器以及连接队列,事件检测器是根据检测器生成装置生成的,候选连接队列是根据队列创建装置生成的。
在一些实施例中,对象创建模块用于:确定本端中内核的数量,根据所述内核的数量确定目标数量,创建所述目标数量的对象,所述目标数量与所述内核的数量成正相关关系。
在一些实施例中,连接处理装置还包括线程调用模块,当目标事件检测器检测到第一设备通过第一连接发送的第一消息事件时,目标事件检测器调用对应的业务线程对第一消息事件进行处理。
在一些实施例中,连接处理装置还包括:消息处理结果发送模块,目标事件检测器接收业务处理结果,业务处理结果是业务线程对第一消息事件进行处理得到的,将业务处理结果通过第一连接发送给第一设备。
关于连接处理装置的具体限定可以参见上文中对于连接处理方法的限定,在此不再赘述。上述连接处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一些实施例中,提供了一种计算机设备,该计算机设备可以是服务端,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种连接处理方法。该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一些实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:与第一设备建立第一连接;从多个候选连接集合中,确定第一连接对应的目标连接集合,各个候选连接集合对应有事件检测器;将第一连接加入到目标连接集合中;利用目标连接集合对应的目标事件检测器,检测目标连接集合中各个目标连接对应的消息事件;当检测到待处理的消息事件时,对待处理的消息事件进行处理。
在一些实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:与第一设备建立第一连接;从多个候选连接集合中,确定第一连接对应的目标连接集合,各个候选连接集合对应有事件检测器;将第一连接加入到目标连接集合中;利用目标连接集合对应的目标事件检测器,检测目标连接集合中各个目标连接对应的消息事件;当检测到待处理的消息事件时,对待处理的消息事件进行处理。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种连接处理方法,所述方法包括:
创建对象,所述对象包括候选连接集合以及事件检测器,建立所述候选连接集合与所述事件检测器的对应关系;所述事件检测器用于对连接中的消息事件进行检测;
创建事件分发器;利用所述事件分发器获取各个所述候选连接集合对应的对象标识,将各个所述对象标识加入到内置的队列中,得到对象标识队列;对象标识用于唯一标识对象;
创建多个通道,并将所述多个通道注册到接入监听器;
利用所述接入监听器监听连接请求,当所述接入监听器监听到第一设备发送的第一连接请求时,所述接入监听器根据所述第一连接请求与所述第一设备建立第一连接,并将所述第一连接委托至所述事件分发器,以使得所述事件分发器将所述第一连接分发到对应的目标连接集合中;所述第一连接在对应的链路建立完成后,在所述链路空闲时维持有效;
基于所述事件分发器从所述对象标识队列中获取目标对象标识,将所述目标对象标识对应的候选连接集合作为所述第一连接对应的目标连接集合;所述目标对象标识是按照队列的先进先出性质从对象标识队列中获取的;
将所述第一连接加入到所述目标连接集合中;
利用所述目标连接集合对应的目标事件检测器,检测所述目标连接集合中各个目标连接对应的消息事件;所述目标连接对应的消息事件是通过所述目标连接发送的;
当检测到通过所述第一连接发送的待处理的消息事件时,对所述待处理的消息事件进行处理。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
为所述第一连接打上已连接的标识。
3.根据权利要求1所述的方法,其特征在于,所述消息事件指的是从连接中读取消息的读事件或者通过连接发送消息的写事件中的至少一个。
4.根据权利要求1所述的方法,其特征在于,所述候选连接集合的数量与所述事件检测器的数量相同。
5.根据权利要求1所述的方法,其特征在于,所述候选连接集合为连接队列,所述创建对象,所述对象包括候选连接集合以及事件检测器,建立所述候选连接集合与所述事件检测器的对应关系包括:
获取预先存储的连接处理类,所述连接处理类中定义了检测器生成方法以及连接队列创建方法;
根据所述连接处理类生成多个连接处理对象,各个所述连接处理对象包括事件检测器以及连接队列,所述事件检测器是根据所述检测器生成方法生成的,所述连接队列是根据所述连接队列创建方法生成的。
6.根据权利要求1所述的方法,其特征在于,所述当检测到通过所述第一连接发送的待处理的消息事件时,对所述待处理的消息事件进行处理,包括:
当所述目标事件检测器检测到通过所述第一连接发送的第一消息事件时,所述目标事件检测器调用对应的业务线程对所述第一消息事件进行处理。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
所述目标事件检测器接收业务处理结果,所述业务处理结果是所述业务线程对所述第一消息事件进行处理得到的;
将所述业务处理结果通过所述第一连接发送给所述第一设备。
8.一种连接处理装置,所述装置包括:
对象创建模块,用于创建对象,所述对象包括候选连接集合以及事件检测器,建立所述候选连接集合与所述事件检测器的对应关系;所述事件检测器用于对连接中的消息事件进行检测;
事件分发器创建模块:用于创建事件分发器;
对象标识队列创建单元,用于利用所述事件分发器获取各个所述候选连接集合对应的对象标识,将各个所述对象标识加入到内置的队列中,得到对象标识队列;对象标识用于唯一标识对象;所述装置还用于:创建多个通道,并将所述多个通道注册到接入监听器;
连接建立模块,用于利用所述接入监听器监听连接请求,当所述接入监听器监听到第一设备发送的第一连接请求时,所述接入监听器根据所述第一连接请求与所述第一设备建立第一连接,并将所述第一连接委托至所述事件分发器,以使得所述事件分发器将所述第一连接分发到对应的目标连接集合中;所述第一连接在对应的链路建立完成后,在所述链路空闲时维持有效;
集合确定模块,用于基于所述事件分发器从所述对象标识队列中获取目标对象标识,将所述目标对象标识对应的候选连接集合作为所述第一连接对应的目标连接集合;所述目标对象标识是按照队列的先进先出性质从对象标识队列中获取的;
加入模块,用于将所述第一连接加入到所述目标连接集合中;
检测模块,用于利用所述目标连接集合对应的目标事件检测器,检测各个所述连接对应的消息事件;所述目标连接对应的消息事件是通过所述目标连接发送的;
处理模块,用于当检测到通过所述第一连接发送的待处理的消息事件时,对所述待处理的消息事件进行处理。
9.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1至7中任一项所述方法的步骤。
10.一种存储有计算机程序的存储介质,所述计算机程序被一个或多个处理器执行时,使得一个或多个处理器执行权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910635872.8A CN110532088B (zh) | 2019-07-15 | 2019-07-15 | 连接处理方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910635872.8A CN110532088B (zh) | 2019-07-15 | 2019-07-15 | 连接处理方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110532088A CN110532088A (zh) | 2019-12-03 |
CN110532088B true CN110532088B (zh) | 2022-09-23 |
Family
ID=68660289
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910635872.8A Active CN110532088B (zh) | 2019-07-15 | 2019-07-15 | 连接处理方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110532088B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114785854A (zh) * | 2022-04-21 | 2022-07-22 | 中国工商银行股份有限公司 | 业务请求处理方法、装置、设备、存储介质及产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102355496A (zh) * | 2011-09-27 | 2012-02-15 | 中国铁道科学研究院电子计算技术研究所 | 列车车地间数据通信方法 |
CN104683460A (zh) * | 2015-02-15 | 2015-06-03 | 青岛海尔智能家电科技有限公司 | 一种物联网的通信方法、装置及服务器 |
CN107657532A (zh) * | 2016-07-25 | 2018-02-02 | 武汉票据交易中心有限公司 | 一种业务流程的处理方法及系统 |
CN108647104A (zh) * | 2018-05-15 | 2018-10-12 | 北京五八信息技术有限公司 | 请求处理方法、服务器及计算机可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6651111B2 (en) * | 2001-02-16 | 2003-11-18 | Microsoft Corporation | System and method for managing a serial port |
-
2019
- 2019-07-15 CN CN201910635872.8A patent/CN110532088B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102355496A (zh) * | 2011-09-27 | 2012-02-15 | 中国铁道科学研究院电子计算技术研究所 | 列车车地间数据通信方法 |
CN104683460A (zh) * | 2015-02-15 | 2015-06-03 | 青岛海尔智能家电科技有限公司 | 一种物联网的通信方法、装置及服务器 |
CN107657532A (zh) * | 2016-07-25 | 2018-02-02 | 武汉票据交易中心有限公司 | 一种业务流程的处理方法及系统 |
CN108647104A (zh) * | 2018-05-15 | 2018-10-12 | 北京五八信息技术有限公司 | 请求处理方法、服务器及计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
Design and implementation of short message gateway for vehicle monitoring systems;Yuan Cangzhou;《Journal of Beijing University of Aeronautics and Astronautics》;20040229;第30卷(第2期);第184页 * |
航海模拟器数据通信的优化设计与实现;郝爽爽;《中国优秀硕士学位论文全文数据库 工程科技Ⅱ辑》;20131215(第S1期);C036-25 * |
Also Published As
Publication number | Publication date |
---|---|
CN110532088A (zh) | 2019-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105939279B (zh) | 流量处理方法和装置 | |
CN113326155B (zh) | 一种信息处理方法、装置、系统和存储介质 | |
CN113259415B (zh) | 一种网络报文处理方法、装置及网络服务器 | |
CN113965628B (zh) | 消息调度方法、服务器和存储介质 | |
CN107529186A (zh) | 多通道传输上行数据的方法及系统、客户端、服务器 | |
CN113300854A (zh) | 一种边缘节点能力扩展方法、系统及扩展盒子 | |
CN113891396A (zh) | 数据包的处理方法、装置、计算机设备和存储介质 | |
CN110532088B (zh) | 连接处理方法、装置、计算机设备和存储介质 | |
US11064326B2 (en) | Creating, joining, finding, discovering, restoring and relocating process-based channels | |
CN113420007A (zh) | 数据库访问的审计处理方法、装置及电子设备 | |
CN112702362B (zh) | Tcp/ip协议栈的增强方法、装置、电子设备及存储介质 | |
CN109445969A (zh) | 一种分布式tgt节点间的通信方法、装置及设备 | |
CN105306755A (zh) | 联络中心质检方法及装置 | |
CN104243358B (zh) | Vcf系统中pe设备软件加载的方法以及装置 | |
CN101651713A (zh) | 一种智能卡网络数据传输方法及装置 | |
CN107483384B (zh) | 一种网络数据交互方法及装置 | |
CN113630442B (zh) | 数据传输方法、装置及系统 | |
CN114996730A (zh) | 一种数据加解密系统、方法、计算机设备及存储介质 | |
CN115225482A (zh) | 一种基于Kubernetes进行Pod容器网络配置的方法及装置 | |
CN101753588B (zh) | 一种融合业务使用控制方法及系统 | |
CN112995095B (zh) | 数据处理方法、装置及计算机可读存储介质 | |
Kaur | Fault tolerant data offloading in opportunistic fog enhanced IoT architecture | |
CN109660495B (zh) | 一种文件传输方法和装置 | |
CN101635669B (zh) | 一种用于数据共享系统中获取数据片段的方法 | |
WO2023185297A1 (zh) | 数据包传输方法、装置、设备、存储介质及程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |