CN103441999A - 一种套接字连接池控制方法 - Google Patents
一种套接字连接池控制方法 Download PDFInfo
- Publication number
- CN103441999A CN103441999A CN2013103701297A CN201310370129A CN103441999A CN 103441999 A CN103441999 A CN 103441999A CN 2013103701297 A CN2013103701297 A CN 2013103701297A CN 201310370129 A CN201310370129 A CN 201310370129A CN 103441999 A CN103441999 A CN 103441999A
- Authority
- CN
- China
- Prior art keywords
- socket
- connection pool
- chained list
- control method
- steps
- 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.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种套接字连接池控制方法,包括步骤:a.接收获取连接池内套接字的请求信息;b.判断所述连接池内是否存在空闲的套接字;c.若存在空闲的套接字,则将所述套接字分配给上述请求信息对应的请求。避免频繁的创建套接字描述符,为系统节省套接字。同时采用所述套接字连接池,节省每次创建完套接字描述符后要建立连接的过程时间,以提高性能。
Description
技术领域
本发明涉及套接字连接池控制方法,尤其是以Axcore和rtbclient通信为背景,具体的是涉及在ssp服务器端产生大量套接字后对套接字的统一支配管理的控制方法。
背景技术
Axcore和rtbclient通信中,当大量用户访问时,在SSP服务器端会采用短连接,导致频繁的创建套接字描述符,由于套接字描述符主动关闭端,会产生TIME_WAIT状态,这个状态可能从半分钟到两分钟不等,视系统而定。当处于TIME_WAIT状态时,此套接字描述符是不可用的,从而使得系统套接字匮乏。
针对上述问题我们采用长连接方案,即创建的套接字描述符不主动关闭,只要此套接字描述符没有损坏就一直可用。为了维护和统一管理这么多的长连接套接字,提出连接池的概念,简单的来说:就是把建立好的处于连接状态的套接字描述符都存放到一个容器中,当需要套接字通信的时候,就从容器中取出来一个使用,当使用完成后在放回容器。
因此提出连接池的概念用于维护和管理套接字:一是不用频繁的创建套接字描述符,为系统节省套接字。二是采用连接池的话,节省每次创建完套接字描述符后要建立连接的过程时间,以提高性能。
所以发明人提出套接字连接池的概念对axcore和rtbclient通信中SSP端产生的套接字进行统一集中管理分配。
发明内容
针对现有axcore和rtbclient通信中SSP端产生大量套接字浪费系统套接字数量和浪费套接字连接过程的时间问题,本发明提出一种套接字连接池控制方法。
根据本发明的一个方面,提供一种套接字连接池控制方法包括步骤:a.接收获取连接池内套接字的请求信息;b.判断所述连接池内是否存在空闲的套接字;c.若存在空闲的套接字,则将所述套接字分配给上述请求信息对应的请求。
优选地,还包括步骤:d.若不存在空闲的套接字,则进一步判断所述连接池内的套接字数量是否超过第二阈值;e.若所述连接池内的套接字数量小于所述第二阈值,则创建一个套接字,并将所述被创建的套接字分配给上述请求信息对应的请求。
本发明通过套接字连接池的概念为通信端提供套接字维护方法,并在套接字取用过程中实现对套接字有效的连接和释放。进一步的对不同终端采用不同监听方式优化管理过程。避免频繁的创建套接字描述符,为系统节省套接字。同时采用所述套接字连接池,节省每次创建完套接字描述符后要建立连接的过程时间,以提高性能。
附图说明
通过阅读参照一下附图对非限制性实习例所作的详细描述,本发明的其它特征,优势,结构将会变得更明显
图1示出根据本发明的第一实施例的,套接字连接池的总流程图;
图2示出根据本发明的第一实施例的,套接字连接池的实现流程图;
图3示出根据本发明的第一实施例的,套接字连接池的初始化流程图;
图4示出根据本发明的第一实施例的,套接字连接池在取用套接字时的流程图;
图5示出根据本发明的第一实施例的,套接字连接池在放回套接字时的流程图;
图6示出根据本发明的第一实施例的,套接字连接池的网络拓扑图;以及
图7示出根据本发明的第一实施例的,套接字链表被处理过程的示意图。
具体实施方式
图1示出根据本发明的第一实施例的,一种套接字连接池的控制方法的实现方案的概要图。本领域技术人员理解,在本实施例中所述的套接字连接池优选地应用于需要多次通讯的通讯组件中,例如服务器与客户端的通讯,或者多个客户端直接的通讯等等。具体地,在本实施例中,首先要建立连接池。优选地,本领域技术人员理解,就是把建立好的处于连接状态的套接字都存放到一个容器中,当需要套接字通信的时候,就从容器中取出来一个使用,当使用完成后在放回容器。
进一步地,优选地,本领域技术人员理解,为了实现套接字连接池的控制方法,首先要执行步骤S110,接收获取连接池内套接字的请求信息。优选地,本领域技术人员理解,在本实施例中,客户端或者终端首先向服务器发出获取套接字的请求信息。具体地,在本实例中,在客户端发起要取用套接字的请求信息后,服务端的服务器对所述客户端发起取用套接字的请求信息进行接收。例如,客户端和服务器端建立连接后某进程需要使用套接字,则所述进程向端口发出请求信息,所述请求信息为要求分配空闲套接字请求信息。端口对所述请求信息进行接收,从而准备后续工作。更为具体地,本领域技术人员理解,线程调用连接池提供的接口函数,向函数传递dsp的ip和port信息,此接口函数根据ip和port组成的关键字(key)去map容器中去获取所述套接字信息。
进一步地,优选地,本领域技术人员理解,为了实现套接字连接池对套接字的分配,要执行步骤S111,对所述套接字连接池内是否存在空闲的套接字做出判断。优选地,本领域技术人员理解,在本实施例中,客户端和服务器端建立连接后如果有线程需要获取套接字,则系统要判断是否有空闲的套接字分配给所述线程,并以此判断为根据对系统后续一系列动作做出响应。具体地,在本实施例中,当有线程要获取套接字,系统根据所述套接字连接池内的套接字状态对所述线程的获取套接字信息进行回应。例如,当线程提出取用套接字时,系统要决定是从所述套接字连接池内分配给所述线程还是由系统重新创建套接字分配给所述线程。所述决定都依赖于对所述套接字连接池内是否存在空闲的套接字做出判断。本领域技术人员理解,所述获取套接字的线程优选地是当前进程的线程。
进一步地,优选地,本领域技术人员理解,若所述套接字连接池内存在空闲的套接字,则执行步骤S112,将所述套接字分配给上述请求信息对应的请求。具体地,本领域技术人员理解,在本实施例中,若所述套接字连接池内存在空闲的套接字,所述空闲套接字通过状态监听,判断为连接成功状态。则将所述连接成功状态的套接字分配给所述请求信息对应的请求。进一步地,本领域技术人员理解,在后续实施例中,我们会阐述如何进行状态监听,判断所述套接字是否为连接成功状态。
进一步地,优选地,本领域技术人员理解,若所述套接字连接池内不存在空闲的套接字,则执行步骤S113,进一步判断所述套接字数量是否超过第二阈值。具体地,本领域技术人员理解,若所述连接池内的套接字数量小于所述第二阈值,则创建一个套接字,并将所述被创建的套接字分配给上述请求信息对应的请求。进一步地,本领域技术人员理解,在后续实施例中,我们会阐述如何创建套接字。
进一步地,优选地,本领域技术人员理解,为了实现套接字连接池对套接字的回收,要执行步骤S114,获取释放套接字的控制信息。优选地,本领域技术人员理解,在本实施例中,当所述线程成功获取套接字,系统对所述被分配套接字处理完成后,需要获取是否套接字的控制信息,使得在处理完所述被成功获取的套接字后能继续放回所述套接字连接池内。例如,某线程获取套接字并对所述套接字处理完成后要放回所述连接池内继续供其他线程所使用,所以,在所述套接字处理完成后要将所述套接字的控制信息进行释放,以便于后续对所述套接字状态的判断,从而能决定是否要将所述套接字放回连接池备用。
图2示出根据本发明的第一实施例的,一种套接字连接池的控制方法的实现方案的实现流程图。具体地,本实施例描述了套接字连接池的建立、管理的总体流程或者说概括流程。优选地,本领域技术人员理解,在本实施例中,我们以axcore(即ssp内核)端和rtbclient端为例来描述连接池的建立以及管理过程。本领域技术人员理解,优选地,在axcore端,当apache启动时创建一定数量的套接字,并把这些套接字存入STL(Standard Template Library,标准模板库)的容器中,而容器是采用map数据结构对其中的套接字结构进行存储。并且对存入容器的套接字采用长连接的方式维护其连接的状态,从而达到随时取用的目的。本领域技术人员理解,以此可以实现连接池控制方法。本领域技术人员理解,上述rbtclient为本系统所定义的一个客户端,其具有本发明所描述的功能和技术要求,在此不予赘述。
进一步地,优选地,本领域技术人员理解,首先进程发出获取套接字的请求信息,然后由系统接收获取套接字的请求信息,接下来开始取用连接池内的套接字。在取用连接池内套接字时要执行步骤S210,判断连接池内是否有空闲套接字。具体地,本领域技术人员理解,判断所述连接池内是否存在套接字,并根据判断结果进行相应的处理。优选地,本领域技术人员理解,在本实施例中,若所述连接池内不存在套接字,则重复创建套接字直至所述连接池内的套接字数量等于所述第一阈值。具体地,本领域技术人员理解,若所述连接池内的套接字数量不超过所述第一阈值,则创建到与第一阈值相等的套接字,并将所述第一阈值的套接字放入所述连接池内供进程调用。进一步地,本领域技术人员理解,在后续实施例中,我们会阐述如何创建套接字。
更进一步地,本领域技术人员理解,若连接池内存在空闲套接字,创建套接字过程中需要执行步骤S211,判断所需套接字数量是否大于所述套接字连接池内套接字现有数量,所述套接字连接池内套接字现有数量为第二阈值减去已经被分配的套接字数量。如果所需套接字数量大于所述套接字连接池内套接字现有数量则取用连接池内所有套接字并由系统重新分配剩余需要数量的套接字。如果小于所述套接字连接池内套接字现有数量则直接分配给进程所需的套接字。例如,连接池内套接字最大存放量为1000个套接字,已经分配给其他线程500个套接字,则接池内现有500个套接字,若当前线程所需套接字数量为900个套接字,则先分配连接池内500个套接字,然后由系统重新创建400个套接字供所述当前线程使用。
进一步地,优选地,本领域技术人员理解,在另一变化例中,当所需套接字的数量大于连接池内的现有套接字数量时可以直接由系统创建所需数量的套接字,供线程使用。当所述系统创建的套接字处理完毕后,不放入所述套接字连接池内保持长连接的状态,而是自动关闭,不影响所述套接字连接池内的套接字分配情况。例如,连接池内套接字最大存放量为1000个套接字,已经分配给其他线程500个套接字连,接池内现有500个套接字时,当当前线程所需套接字数量为900个套接字,则由系统重新创建900个套接字供所述当前线程使用。对所述创建的900个套接字处理完成后自动关闭,对所述套接字连接池内现有的500个套接字的分配不产生影响。
进一步地,优选地,本领域技术人员理解,在本实施例中,要把处理完成的套接字放回连接池前要执行步骤S212,判断释放后套接字的数量是否大于第二阈值,如果所述释放后套接字的数量大于第二阈值则关闭比第二阈值多余出的套接字,如果所述释放后套接字的数量小于第二阈值则放回到连接池中。例如,释放后套接字连接池内套接字数量为1100大于连接池内套接字最大存放量1000,则将多余的100个套接字关闭,剩余的套接字放回到连接池内。
进一步地,优选地,本领域技术人员理解,在另一变化例中,可以设置每次放回连接池内的套接字的最大值和累积连续放回次数。例如,每次最多放回100个套接字,剩余套接字关闭,最多累积连续放回12次。保持所述套接字连接池内的套接字有上限值,避免系统创建太多套接字放入所述套接字连接池内,浪费系统套接字资源。
图3示出根据本发明的第一实施例的,一种套接字连接池的控制方法的实现方案的初始化流程图。具体地,及为所述套接字连接池实现建立的流程图。优选地,本领域技术人员理解,在本实施例中,初始化的过程首先执行步骤S310,确定关键字key。具体地,本领域技术人员理解,采用关键字key对应指定链表,从而统一提供给控制信息。具体地,本领域技术人员理解,在本实施例中,采用用ip和port值组成关键字key,在另一变化例中,可采用其他通信值组成关键字key,对应所述指定链表。但这并不影响本发明的实质内容,在此不予赘述。优选地,本领域技术人员理解,组成所述关键字key后,要执行步骤S311,判断所述关键字key是否存在。具体地,本领域技术人员理解,所述关键字key对应特定的链表,链表中存放有套接字。所述存放有套接字的链表组成套接字连接池。优选地,本领域技术人员理解,若所述关键字已经存在,那么所述套接字连接池内有所述关键字对应的特定链表。具体地,本领域技术人员理解,将空闲的处于连接状态的套接字插入所述特定链表。从而使连接池内的特定链表不为空,及连接池内有可以取用的套接字。
进一步地,优选地,本领域技术人员理解,要将可用套接字存入到所述特定的链表中,首先要执行步骤S312,筛选套接字。优选地,本领域技术人员理解,在使用过程中,所述连接池内的套接字可能被某一端关闭,从而没有处于连接的状态,从而需要对所述连接池内的套接字进行筛选,判断所述套接字是否连接成功,若所述套接字连接成功,则将所述套接字作为可以加入所述连接池的套接字,并将所述连接成功的套接字加入到一特定链表等待分配给进程。具体地,本领域技术人员理解,在筛选过程中要执行步骤S313,判断套接字是否连接成功。优选地,本领域技术人员理解,对所述套接字的筛选过程通过客户端和服务器端对套接字状态的监听实现。优选地,本领域技术人员理解,在本实施例中,如果两端套接字监听结果均为连接则筛选成功,将所述筛选成功的套接字加入所述关键字key值所对应的指定链表中,将没有通过筛选的套接字删除掉后重复上述筛选过程,直至得到与第一阈值相等数量的套接字。优选地,本领域技术人员理解,若所述关键字不存在,则创建所述关键字key值对应的链表。然后创建新的套接字进行上述筛选后存入新创建的所述关键字key值对应的链表。优选地,本领域技术人员理解,在本实施例中,若所述连接池内的套接字数量不超过所述第一阈值,则创建到与第一阈值相等的套接字,并将所述第一阈值的套接字放入所述连接池内。
进一步地,优选地,本领域技术人员理解,在上述实施例中,对套接字的筛选过程在将所述套接字插入到特定链表前。在另一变化例中,可以将所有套接字都插入链表后再进行筛选,判断套接字是否连接成功。连接成功的套接字保留在所述特定链表中,连接不成功的套接字则从链表中删除所述连接不成功的套接字。
更进一步地,优选地,本领域技术人员理解,所述将所述套接字加入一特定链表要判断所述特定链表是否存在,若所述特定链表存在,则直接将所述套接字加入所述特定链表,若所述特定链表不存在,则新建所述特定链表,并将所述套接字加入所述特定链表。优选地,本领域技术人员理解,要对所述特定链表进行封装,所述封装过程将多少特定链表用指针相连接,以使得所述特定链表构成所述连接池。
进一步地,本领域技术人员理解,在本实施例中,采用指针将链表相连接,便于对所述套接字连接池的管理。在另一实施例中,采用数组的方式存放所述套接字,则同样可以采用指针进行连接。也可以不使用指针,直接采用数组的形式。优选地,本领域技术人员理解,数组直接存放套接字的地址,则通过各个套接字的地址来管理所述套接字连接池。但这并不影响本发明的实质内容,在此不予赘述。
更进一步地,优选地,本领域技术人员理解,所述筛选过程涉及到服务器端对套接字描述符的监听和客户端对套接字描述符的监听,从而判断所述套接字是否仍保持长连接的状态而没有自动关闭。优选地,本领域技术人员理解,采用select对所述客户端的套接字进行监听,判断所述客户端的套接字是否连接正常。采用epoll模型对所述服务器端的套接字进行监听,判断所述服务器端的套接字是否连接正常。当所述服务器端和客户端监听的套接字均为正常连接状态则待取用,否则关闭套接字。优选地,本领域技术人员理解,还可以采用其他模型对服务器和客户端的套接字进行监听。但这并不影响本发明的实质内容,在此不予赘述。
进一步地,优选地,本领域技术人员理解,创建好所需数量的套接字并通过筛选成功插入指定链表中后,采用map的数据结构方式对所述指定链表进行顺序管理。优选地,本领域技术人员理解,之后把这些链表存入STL(Standard Template Library,标准模板库))的容器中,容器是采用map数据结构对其中的套接字结构进行存储,从而完成整个套接字连接池的初始化建立。同时所述套接字连接池内的套接字均要保持长连接的状态不关闭。
进一步地,本领域技术人员理解,优选地,在本实施例中,发明人采用链表的方式存储套接字,并形成所述套接字连接池。优选地,本领域技术人员理解,在另一变化例中,还可以采用数组的方式存放所述套接字,具体地,将套接字以数组的方式进行管理,所述套接字的控制信息均来自数组的控制信息,通过插入或者移除数组实现对套接字的取用和放回。优选地,本领域技术人员理解,然后采用存放套接字的数组组成所述套接字连接池。但这不影响本发明的实质内容,在此不予赘述。
图4示出根据本发明的第一实施例的,套接字连接池在取用套接字时的流程图。优选地,本领域技术人员理解,从所述套接字连接池内取用套接字时,首先要根据所述请求信息确定本次请求对应的关键字,然后执行步骤S410,判断所述套接字连接池内是否存在相应的关键字key。具体地,本领域技术人员理解,在本实施例中,在所述连接池内查找与所述关键字对应的特定链表。优选地,本领域技术人员理解,在本实施例中,当取用所述连接池内套接字时,根据进程提供的ip和port组成关键字key进行后续处理。根据所述关键字key判断所述套接字连接池内有没有对应的特定链表,从而在特定链表中查找可以进行分配的套接字。若所述特定链表内不存在可用套接字,则创建一个与所述关键字对应的套接字,并将所述套接字分配给所述请求信息对应的请求。执行步骤S413,返回所述新创建的与所述关键字对应的套接字,并将所述对应的套接字存入关键字对应的链表,供进程使用。若所述特定链表内存在可用套接字,则根据所述请求信息分配对应的套接字给所述请求信息对应的请求。
进一步地,优选地,本领域技术人员理解,对关键字key对应的链表进行加锁,防止其它线程竞争所述关键字key对应的链表。然后执行步骤S411,判断所述关键字key对应的链表是否为空,如果所述链表不为空,则将所述key对应的链表中的第一个套接字取出,解锁关键字key对应的链表的线程锁。具体地,本领域技术人员理解,将所述被锁定的特定链表解锁。然后判断所述对应套接字是否处于连接状态,优选地,本领域技术人员理解,在本实施例中,链表解锁后判定套接字是否可用,具体地,本领域技术人员理解,所述链表解锁后判定套接字可用则将该套接字分配给请求信息,不可用则继续上述步骤获取套接字。具体地,本领域技术人员理解,所述判定套接字是否可用要通过筛选所述套接字,查看套接字状态,如果所述套接字状态为连接状态则判定所述对应套接字可用,返回所述套接字。如果所述套接字状态为连接状态则从新在所述套接字连接池内实施取用步骤。
进一步地,本领域技术人员理解,在本实施例中,如果所述关键字key对应链表为空,则创建新的套接字,所述创建新的套接字完成后继续对套接字的筛选步骤S412,判断套接字是否连接成功。在上述图2中已经详细介绍所述对套接字的筛选过程,在此不予赘述。如果所述套接字连接成功则解锁key对应的链表的线程锁。所述套接字连接成功则可用,返回所述套接字。结束取用过程。
本领域技术人员理解,在上述实施例的一个变化例中,所述对关键字key对应的链表进行锁操作步骤不可以被省略,在这样的变化例中,若有其他线程竞争所述套接字,则将所述套接字分配给优先调用的线程,后续线程继续执行步骤S410,判断所述套接字连接池内是否存在相应的关键字key,若存在则对key所对应的链表加锁,此线程获得锁后继续执行步骤S411,判断所述关键字key对应的链表是否为空,如果所述链表为不为空,则将所述对应套接字插入进程调用链表,直到获取到需要的套接字为止。而在另一个变化例中,所述对关键字key对应的链表进行锁操作的步骤可以被对关键字key对应的链表进行状态判定的步骤所替代,即当所述关键字key对应的链表被处理时,限定所述链表状态为wait。优选地,本领域技术人员理解,此时,当其它线程同样对应所述链表时,先读取所述链表的状态,若为wait,则等待所述链表处理完毕后再进行上述后续操作。若所述链表状态不为wait,则直接进行上述后续操作。
图5示出根据本发明的第一实施例的,套接字连接池在放回套接字时的流程图。优选地,本领域技术人员理解,在本实施例中,当所述被分配的套接字处理完成后要防止所述被分配的套接字自动关闭,要放回所述套接字连接池内保持长连接的状态。以便于下次有线程需要获取套接字时,可以一定程度上免去重新创建套接字的过程,直接将所述套接字连接池内的空闲套接字分配给所述线程。例如,线程a成功获取套接字后对所述套接字进行处理,当处理完成后不直接自动关闭,被系统回收,而是放回到所述套接字连接池中,继续保持连接的状态,以便下一次其他线程b获取所述套接字。优选地,本领域技术人员理解,在本实施例中,当所述套接字要放回到所述套接字连接池内时,首先要执行步骤S510,载入处理完成的套接字链表。等待释放连接请求信息,判断处理完成的套接字链表是否为空,如果不为空则释放连接,将套接字放回所述连接池。优选地,本领域技术人员理解,所述处理完成的套接字是线程在取用的套接字,在所述被取用的套接字被处理完毕后,要进行回收处理。优选地,在本实施例中,所述回收处理指将所述处理完成的套接字放回所述套接字连接池。
进一步地,优选地,本领域技术人员理解,在本实施例中采用不断取用,放回的方式对套接字进行管理。在另一变化例中,对所述套接字处理完成后,也可以将所述处理完成的套接字直接关闭,同时在所述套接字连接池内分配套接字的时候就重建新的套接字,存放到所述套接字连接池内,提供给不同的线程使用。
进一步地,优选地,本领域技术人员理解,在本实施例中,要对所述处理完成的套接字链表进行处理,首先要执行步骤S511,判断所述处理完成的套接字链表是否为空。具体地,本领域技术人员理解,系统要等待释放连接请求信息,判断处理完成的套接字链表是否为空,如果不为空则释放套接字,将套接字放回所述连接池。若所述处理完成的套接字链表为空,则等待下一次请求信息,然后根据下一次的请求信息做出相应处理。优选地,本领域技术人员理解,所述将套接字放回所述套接字连接池要先获取所述处理完成的套接字链表对应的关键字key。具体地,本领域技术人员理解,在本实施例中,关键字key对应特定链表,获取所述处理完成的套接字链表的关键字key使得将该特定链表按关键字key放回到所述套接字连接池内,等待后续请求信息请求调用。
进一步地,优选地,本领域技术人员理解,获取所述套接字对应的关键字key,执行步骤S512,判断连接池内有没有对应的key值。具体地,优选地,本领域技术人员理解,要获取链表内套接字对应的关键字key。判断连接池内是否存在匹配的关键字,若存在所述匹配关键字则将所述套接字插入到所述连接池内匹配的关键字所对应的链表中。若不存在所述匹配关键字则将所述套接字删除。所述将所述套接字插入到所述连接池内匹配的关键字所对应的链表中,首先判断关键字key对应链表的大小是否小于第二阈值并做出相应处理。具体地,本领域技术人员理解,如果所述关键字key对应链表的大小不小于第二阈值,则删除该链表内多余的套接字。如果所述关键字对应的链表内套接字数量小于第二阈值,则将该套接字插入到连接池内匹配的关键字所对应的链表中。若所述套接字的数量小于所述第一阈值,则创建和第一阈值相等的套接字,并且存放于容器中。然后执行步骤S514,解锁关键字key对应链表的线程锁。完成所述套接字返回所述套接字连接池工作。
图6示出根据本发明的第一实施例的,套接字连接池的网络拓扑图。具体地,本领域技术人员理解,在实施例中,包括客户端1和服务器端2,所述客户端1和服务器端2通信连接过程中要使用套接字则从套接字连接池3中获取套接字5,当处理完成后将套接字5再放回所述套接字连接池3中。优选地,本领域技术人员理解,所述套接字连接池内为不同的关键字key所对应的不同特定链表。每个链表中存放有一定数量的套接字。
进一步地,优选地,本领域技术人员理解,当系统接收获取连接池内套接字的请求信息后,根据线程提供的ip和port值组成关键字key,然后从所述套接字连接池3内找到对应的关键字key,并从所述对应的关键字key对应的特定链表里筛选出可以分配的套接字。优选地,本领域技术人员理解,筛选出所述可以分配的套接字5后,将套接字分配给发出获取连接池内套接字请求信息的线程。优选地,本领域技术人员理解,套接字5处理完成后要放回所述套接字连接池3内。
进一步地,优选地,本领域技术人员理解,放回到连接池内要获得套接字所在链表对应的关键字key,然后在所述套接字连接池3内查找对应的关键字对应的特定链表,找到所述对应的特定链表后将所述套接字5放回到所述特定链表中,保持长连接的状态。完成套接字连接池管理和维护套接字的过程。
参考上述图1至图6所示实施例,本领域技术人员理解,上述port优选地是与我们服务器通信的dsp(英文全称为:Demand SidePlatform),若有多家dsp就会有条链表,每条链表中存放的是与关键字(ip+port组成)一一对应的。所述ip为dsp的域名或ip地址,port是dsp的端口号。如下图所示。连接池优选地位于ssp(英文全称为:Supply Side Platform)服务器上,用于统一管理与dsp通信的套接字。
结合上述实施例以及变化例,本领域技术人员理解,在一个变化例中,可以使用数组来存放套接字。在这样的变化例中,需要一个额外的结构体来辅助,比如这样的一个结构体:
如图7所示,其示出了根据本发明的第一实施例的,套接字链表被处理过程的示意图。具体地,首先初始化数组。相当于实现的数组队列。当end(尾指针)移动到下表7后再插入套接字的话此时end要移动到下标0的地方,而去用套接字后begin(首指针)也是依次后移,若begin和end相等的话认为无可用套接字。
具体地,参考上述图1至图7所示实施例,本领域技术人员理解,特定链表之间不是以指针相连,而是放入一个map容器中,就好比一个多层的饭盒,每层放着不同种类的菜而每层的外面写着菜的名字。菜的名字可以看作关键字,而菜看作特定的链表,现在想吃土豆丝,就取出写着土豆丝的那层饭盒。若用数组实现,以下标作为关键字,内容是链表即可。但是以下标作为关键词存放链表不容易识别。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。
Claims (23)
1.一种套接字连接池控制方法,用于对套接字进行管理,其包括如下步骤:
a.接收获取连接池内套接字的请求信息;
b.判断所述连接池内是否存在空闲的套接字;
c.若存在空闲的套接字,则将所述套接字分配给上述请求信息对应的请求。
2.根据权利要求1所述的控制方法,其特征在于,还包括步骤:
d.若不存在空闲的套接字,则进一步判断所述连接池内的套接字数量是否超过第二阈值;
e.若所述连接池内的套接字数量小于所述第二阈值,则创建一个套接字,并将所述被创建的套接字分配给上述请求信息对应的请求。
3.根据权利要求1或2所述的控制方法,其特征在于,还包括如下步骤:
f.获取释放套接字的控制信息;
g.判断与所述套接字具有相同关键字的套接字的数量是否大于第一阈值,若所述套接字的数量小于所述第一阈值,则创建和第一阈值相等的套接字。
h.分配的套接字处理完成后放回连接池。
4.根据权利要求3所述的控制方法,其特征在于,在所述步骤h之前还包括如下步骤:
i.若所述套接字的数量不大于所述第二阈值,则将处理完成的套接字放回连接池。
j.若所述套接字的数量大于所述第二阈值,则将多余套接字直接关闭。
5.根据权利要求1至4中任一项所述的控制方法,其特征在于,在所述步骤a之前还包括如下步骤:
i.判断所述连接池内是否存在套接字;
ii.若所述连接池内不存在套接字,则重复创建套接字直至所述连
接池内的套接字数量等于所述第一阈值。
6.根据权利要求1至5中任一项所述的控制方法,其特征在于,所述创建套接字的步骤包括如下步骤:
I.分配一个或多个套接字;
II.筛选可用的套接字,并判断所述可用套接字加入所述连接池内后所述连接池内的套接字数量是否超过所述第一阈值;
III.若所述连接池内的套接字数量不超过所述第一阈值,则创建到与第一阈值相等的套接字,并将所述第一阈值的套接字放入所述连接池内。
7.根据权利要求6所述的控制方法,其特征在于,所述筛选可用套接字的步骤包括如下步骤:
-判断所述套接字是否连接成功;
-若所述套接字连接成功,则将所述套接字作为可以加入所述连接池的套接字。
8.根据权利要求6或7所述的控制方法,其特征在于,所述将所述可用套接字放入所述连接池内的步骤包括如下步骤:
-将所述套接字加入一特定链表。
9.根据权利要求3至8中任一项所述的控制方法,其特征在于,在所述步骤g之前还包括如下步骤:
k.将与所述套接字匹配的特定链表锁定。
10.根据权利要求8或9所述的控制方法,其特征在于,所述将所述套接字加入一特定链表的步骤还包括如下步骤:
-判断所述特定链表是否存在;
-若所述特定链表存在,则直接将所述套接字加入所述特定链表;
-若所述特定链表不存在,则新建所述特定链表,并将所述套接字加入所述特定链表。
11.根据权利要求8至10中任一项所述的控制方法,其特征在于,所述特定链表对应于一个关键字。
12.根据权利要求11所述的控制方法,其特征在于,所述关键字由Ip+port组成。
13.根据权利要求10至12中任一项所述的控制方法,其特征在于,所述新建所述特定链表的步骤包括如下步骤:
-对所述特定链表进行封装,以使得所述特定链表构成所述连接池。
14.根据权利要求13所述的控制方法,其特征在于,所述对所述特定链表进行封装的步骤包括如下步骤:
-将所有特定链表均以指针相连接。
15.根据权利要求1至14中任一项所述的控制方法,其特征在于,在所述步骤c之后还包括如下步骤:
i.保持所述连接池内所有套接字处于长连接状态。
16.根据权利要求15所述的控制方法,其特征在于,所述步骤i包括如下步骤:
-采用select对所有客户端的套接字进行监听,判断所述客户端的套接字是否连接正常;
-采用epoll模型对所有服务器端的套接字进行监听,判断所述服务器端的套接字是否连接正常;以及
-当服务器端和客户端监听的套接字均为正常连接状态则待取用,否则关闭套接字。
17.根据权利要求1至16中任一项所述的控制方法,其特征在于,所述步骤c中将所述套接字分配给上述请求信息对应请求的步骤包括如下步骤:
-根据所述请求信息确定本次请求对应的关键字;
-在所述连接池内查找与所述关键字对应的特定链表;
-将所述对应的特定链表锁定;
-判断所述特定链表内是否存在可用的套接字;以及
-若所述特定链表内存在可用套接字,则根据所述请求信息分配对应的套接字给所述请求信息对应的请求。
18.根据权利要求17所述的控制方法,其特征在于,还包括如下步骤:
-若所述特定链表内不存在可用套接字,则创建一个与所述关键字对应的套接字,并将所述套接字分配给所述请求信息对应的请求。
19.根据权利要求17或18所述的控制方法,其特征在于,将所述可用套接字分配给所述请求对应的请求的步骤之前还包括如下步骤:
-将所述被锁定的特定链表解锁。
-链表解锁后判定套接字是否可用,可用则将该套接字分配给请求信息,不可用则继续上述步骤获取套接字。
20.根据权利要求1至19中任一项所述的控制方法,其特征在于,在所述步骤g还包括如下步骤:
-判断现有连接池内套接字的数量是否大于第一阈值,若大于第一阈值,且不超过第二阈值,则存于连接池内。
-若所述套接字的数量小于所述第一阈值,则创建和第一阈值相等的套接字,并且存放于容器中。
21.根据权利要求4至20中任一项所述的控制方法,其特征在于,所述将处理完成的套接字放回连接池的步骤包括如下步骤:
-获取所述套接字对应的关键字;
-判断所述连接池内是否存在匹配的关键字;
-若存在所述匹配关键字则将所述套接字插入到所述连接池内匹配的关键字所对应的链表中。
22.根据权利要求21所述的控制方法,其特征在于,在将所述套接字插入到所述连接池内匹配的关键字所对应的链表中的步骤之前还包括如下步骤:
-对所述关键字对应的链表进行锁操作。
23.根据权利要求21或22所述的控制方法,其特征在于,还包括如下步骤:
-若不存在所述匹配关键字则将所述套接字删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103701297A CN103441999A (zh) | 2013-08-21 | 2013-08-21 | 一种套接字连接池控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103701297A CN103441999A (zh) | 2013-08-21 | 2013-08-21 | 一种套接字连接池控制方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103441999A true CN103441999A (zh) | 2013-12-11 |
Family
ID=49695664
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013103701297A Pending CN103441999A (zh) | 2013-08-21 | 2013-08-21 | 一种套接字连接池控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103441999A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750546A (zh) * | 2013-12-30 | 2015-07-01 | 中国移动通信集团公司 | 一种调整连接池的方法及系统 |
CN104796395A (zh) * | 2014-06-11 | 2015-07-22 | 合肥星服信息科技有限责任公司 | 一种瞬间大规模网络连接的处理方法 |
CN107423118A (zh) * | 2017-04-21 | 2017-12-01 | 广州五舟科技股份有限公司 | 分布式计算数据转发方法和装置 |
CN107453937A (zh) * | 2016-06-01 | 2017-12-08 | 广州市动景计算机科技有限公司 | 网络连接池的管理方法及设备 |
CN108121598A (zh) * | 2016-11-29 | 2018-06-05 | 中兴通讯股份有限公司 | 套接字缓存资源管理方法及装置 |
CN112261094A (zh) * | 2020-10-10 | 2021-01-22 | 厦门网宿有限公司 | 一种报文处理方法及代理服务器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1619855A1 (en) * | 2004-07-21 | 2006-01-25 | Samsung Electronics Co., Ltd. | System and method for managing and checking socket connections between a server and clients. |
CN101990256A (zh) * | 2010-08-27 | 2011-03-23 | 中兴通讯股份有限公司 | 长连接管理装置及长连接通讯的链路资源管理方法 |
CN102916953A (zh) * | 2012-10-12 | 2013-02-06 | 青岛海信传媒网络技术有限公司 | 基于tcp连接实现并发服务的方法及装置 |
CN103164256A (zh) * | 2011-12-08 | 2013-06-19 | 深圳市快播科技有限公司 | 一种实现单机支持高并发处理方法及系统 |
-
2013
- 2013-08-21 CN CN2013103701297A patent/CN103441999A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1619855A1 (en) * | 2004-07-21 | 2006-01-25 | Samsung Electronics Co., Ltd. | System and method for managing and checking socket connections between a server and clients. |
CN101990256A (zh) * | 2010-08-27 | 2011-03-23 | 中兴通讯股份有限公司 | 长连接管理装置及长连接通讯的链路资源管理方法 |
CN103164256A (zh) * | 2011-12-08 | 2013-06-19 | 深圳市快播科技有限公司 | 一种实现单机支持高并发处理方法及系统 |
CN102916953A (zh) * | 2012-10-12 | 2013-02-06 | 青岛海信传媒网络技术有限公司 | 基于tcp连接实现并发服务的方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750546A (zh) * | 2013-12-30 | 2015-07-01 | 中国移动通信集团公司 | 一种调整连接池的方法及系统 |
CN104750546B (zh) * | 2013-12-30 | 2018-01-30 | 中国移动通信集团公司 | 一种调整连接池的方法及系统 |
CN104796395A (zh) * | 2014-06-11 | 2015-07-22 | 合肥星服信息科技有限责任公司 | 一种瞬间大规模网络连接的处理方法 |
CN107453937A (zh) * | 2016-06-01 | 2017-12-08 | 广州市动景计算机科技有限公司 | 网络连接池的管理方法及设备 |
CN107453937B (zh) * | 2016-06-01 | 2021-01-26 | 阿里巴巴(中国)有限公司 | 网络连接池的管理方法、网络访问方法及相关设备 |
CN108121598A (zh) * | 2016-11-29 | 2018-06-05 | 中兴通讯股份有限公司 | 套接字缓存资源管理方法及装置 |
CN107423118A (zh) * | 2017-04-21 | 2017-12-01 | 广州五舟科技股份有限公司 | 分布式计算数据转发方法和装置 |
CN112261094A (zh) * | 2020-10-10 | 2021-01-22 | 厦门网宿有限公司 | 一种报文处理方法及代理服务器 |
CN112261094B (zh) * | 2020-10-10 | 2023-07-21 | 厦门网宿有限公司 | 一种报文处理方法及代理服务器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103441999A (zh) | 一种套接字连接池控制方法 | |
CN104067216B (zh) | 用于实施可扩展数据存储服务的系统和方法 | |
CN109684099B (zh) | 消息处理方法及装置 | |
CN109783229A (zh) | 线程资源分配的方法及装置 | |
CN104778222B (zh) | 基于usb存储设备的媒体库建立及更新方法 | |
CN105808638B (zh) | 数据处理方法和系统 | |
CN103310460A (zh) | 图像特征提取的方法及系统 | |
CN106302632A (zh) | 一种基础镜像的下载方法以及管理节点 | |
CN108280031A (zh) | redis缓存清理方法、服务器及计算机可读存储介质 | |
US20220129381A1 (en) | Blockchain cache system | |
CN110659261A (zh) | 一种数据挖掘模型发布方法及模型和模型服务管理方法 | |
CN114995841B (zh) | 一种实现数据库云服务升级的方法和系统 | |
CN106202416A (zh) | 列表数据写方法和装置、列表数据读取方法和装置 | |
CN101354720A (zh) | 一种分布式内存数据库数据系统及其共享方法 | |
CN103761240B (zh) | 数据库访问方法和装置 | |
CN112019577B (zh) | 专属云存储实现方法、装置、计算设备及计算机存储介质 | |
CN113159674B (zh) | 物料信息的创建方法、物料管理装置和存储介质 | |
CN114866416A (zh) | 一种多集群统一管理系统及部署方法 | |
CN105868023B (zh) | 一种分布式系统中的数据处理方法及计算节点 | |
CN108874798B (zh) | 一种大数据排序方法和系统 | |
CN114816272B (zh) | Kubernetes环境下的磁盘管理系统 | |
CN104050284B (zh) | 一种基于单进程的数据异步查询方法及系统 | |
CN112925852A (zh) | 一种分布式数据库指定节点缩容方法 | |
CN113780704A (zh) | 一种任务处理方法和装置 | |
CN110221745A (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 | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20131211 |