一种多用户并发接入装置及其方法

文档序号:7593013阅读:154来源:国知局
专利名称:一种多用户并发接入装置及其方法
技术领域
本发明涉及一种多用户并发接入装置及其方法,尤其涉及一种基于TCP/IP服务器的多用户并发接入装置及其方法。
背景技术
现有的各种TCP/IP服务器中,对于多用户并发接入,往往采用多线程甚至多进程的方式,即对每一个接入的用户请求,开一个线程或者进程来单独处理该请求。在中国专利申请号为98125973.1的“服务器内分派客户请求时执行语义并发控制的装置和方法”专利所描述的方法中,对每一个存储请求,分别使用了一个线程进行处理。在该专利申请所公开的技术方案中,在多个用户同时访问服务端时,其线程切换消耗了大量的CPU和内存资源,大大降低了处理的速度。
另外,在专利号为6,301,604的“Multimedia Server”(“多媒体服务器”)美国专利中,则对每一个客户端分配一个线程。这种方式的缺点也是大量的线程或者进程占用了更多的CPU和内存的资源,使得系统处理的速度降低。

发明内容
本发明所要解决的技术问题在于提供一种多用户并发接入装置及其方法,其可通过单线程来实现多个用户并发同时访问服务器,从而克服了现有技术中的多用户并发接入时TCP/IP服务器中多线程和多进程占用了无谓的资源而导致系统整体的处理速度降低的缺点。
为了实现上述目的,本发明提供了一种多用户并发接入装置,应用于TCP/IP服务器,包括TCP模块、应用层协议模块和消息处理模块;所述TCP模块包含有TCP主线程单元,用于建立侦听;
TCP链路管理线程单元,用于等待、接收来自客户端的连接请求,并发送所述连接请求至应用层协议模块;TCP接收数据线程单元,用于接收来自客户端的数据,并发送至应用层协议模块;所述应用层协议模块包含有应用层协议线程单元,用于等待、接收来自TCP模块的连接请求和/或数据请求,并为所述连接请求和/或数据请求建立相应的会话,以及用于接收所述TCP模块发送的数据,并发送该数据至所述消息处理模块进行处理;所述消息处理模块包含有消息处理线程单元,用于对来自所述应用层协议模块的数据进行数据处理。
上述的多用户并发接入装置,其中所述应用层协议模块基于HTTP协议、SMTP协议、IMAP4协议以及其它基于TCP/IP的各种应用层协议。
本发明还提供一种利用上述的多用户并发接入装置的多用户并发接入方法,其通过所述TCP主线程、TCP链路管理线程、TCP接收数据线程、应用层协议线程和消息处理线程处理多个客户端应用同时访问服务端,实现多用户的并发接入,该方法包含如下步骤步骤一,应用层协议线程通过TCP主线程建立一个侦听,等待客户端的连接请求消息;步骤二,TCP链路管理线程等待客户端的连接请求消息,并在收到客户端的连接请求消息后,把该连接请求消息发给应用层协议线程;TCP数据接收线程也等待客户端的数据,并在收到数据后把数据发送给应用层协议线程;步骤三,应用层协议线程收到来自TCP链路管理线程的连接请求消息,并为该连接建立一个会话,在该会话中分配套接字和内存,等待接收数据,然后阻塞该应用层协议线程,等待下一个连接或者数据请求,下一个请求如果是连接请求,则重复步骤三,如果是数据请求,则转到步骤四;步骤四,应用层协议线程收到来自TCP数据接收线程的数据请求消息,然后根据收到的该数据请求消息所携带的信息找到相应的会话,然后接收数据,并把数据发送给消息处理线程,然后阻塞该应用层协议线程,等待下一个数据或者连接请求,下一个请求如果是连接请求,则转到步骤一,如果是数据请求,则转到步骤二;
步骤五,消息处理线程收到来自应用层协议的数据请求,对数据进行处理,并且在进行数据处理的过程中,TCP主线程、TCP链路管理线程、TCP接收数据线程和应用层协议线程可以不断地接收连接和数据请求,并把该请求消息放到消息处理线程的消息队列中;当执行完操作后,消息处理线程检查消息队列,如果有消息,则继续处理,没有则阻塞该消息处理线程。
上述的多用户并发接入方法,其中,在步骤一之前还包括一步骤为TCP模块定义一个数据结构链路控制块,设置允许并发接入的用户数目,该数据结构链路控制块包括有表示该链路所使用的套接字、应用层协议的索引以及链路状态的字段,并相应地为应用层协议定义一个会话信息数据结构。
上述的多用户并发接入方法,其中,该链路的状态包括空闲状态、等待连接状态和等待接收数据状态。
上述的多用户并发接入方法,其中,在步骤一中,该TCP主线程收到来自应用协议层线程的服务器注册消息后,唤醒该TCP主线程,并取出收到的消息,根据消息中携带的信息申请一个空闲的数据结构链路控制块,并建立侦听,将该数据结构链路控制块设置成等待连接状态,等待客户端的连接请求。
上述的多用户并发接入方法,其中,在步骤二中,当TCP数据接收线程检查到该链路状态为等待接收数据状态时,该TCP数据接收线程开始通过异步方式接收来自客户端的数据。
上述的多用户并发接入方法,其中,所述TCP主线程、TCP链路管理线程、TCP接收数据线程、应用层协议线程和消息处理线层为一条件循环过程。
上述的多用户并发接入方法,其中,所述应用层协议为HTTP协议、SMTP协议、IMAP4协议以及其它基于TCP/IP的各种应用层协议。
通过上述装置及其方法,用很少的线程实现了多用户的并发接入,第一个用户的处理还没有完成的时候,第二个用户也可以接入,同样第三,第四个也可以接入,直到达到会话数量的限制为止,因此不需要为每一个接入的用户分配一个线程。
采用本发明所述方法,与现有技术相比,可通过少量几个线程处理多用户并发请求,节省了时间和CPU内存,提高了处理速度,避免了线程切换消耗的CPU和内存资源,从而提高了处理的速度。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。


图1为本发明的多用户并发接入装置示意图;图2为本发明的多用户并发接入方法中TCP主线程流程图;图3为本发明的多用户并发接入方法中TCP链路管理线程流程图;图4为本发明的多用户并发接入方法中TCP数据接收线程流程图;图5为本发明的多用户并发接入方法中HTTP线程流程图;图6为本发明的多用户并发接入方法中消息处理线程流程图。
具体实施例方式
请参照图1,本发明的多用户并发接入装置包括包括TCP模块10、应用层协议模块20、消息处理模块30。该TCP模块10包括了TCP主线程单元11、TCP链路管理线程单元12、TCP接收数据线程单元13。该TCP主线程单元11用于建立侦听;该TCP链路管理线程单元12,用于等待、接收来自客户端的连接请求,并发送所述连接请求至应用层协议模块;该TCP接收数据线程单元13,用于接收来自客户端的数据,并发送至应用层协议模块。该应用层协议模块20,用于等待、接收来自TCP模块的连接请求和/或数据请求,并为所述连接请求和/或数据请求建立相应的会话,以及用于接收TCP模块发送的数据,并发送该数据至消息处理模块进行处理。该消息处理模块30,用于对来自应用层协议模块的数据进行数据处理。
本发明的多用户并发接入方法中,主要使用了五个线程,TCP主线程、TCP链路管理线程、TCP接收数据线程、应用层协议线程和消息处理线程。通过上述线程处理多个客户端应用同时访问服务端,实现多用户的并发接入,其实现步骤包括步骤一,首先应用层协议线程通过TCP主线程建立一个侦听,等待客户端的连接请求。
步骤二,TCP链路管理线程会通过select阻塞的方式,来等待客户端的连接请求,当收到客户端的连接请求后,把该连接请求发给应用层协议线程;TCP数据接收线程也通过select方式阻塞,等待客户端的数据,收到数据后把数据发送给应用层协议线程。
步骤三,应用层协议线程收到来自TCP链路管理线程的连接请求,应用层协议线程为该连接建立一个会话,并在该会话中分配套接字(socket)和内存,等待接收数据,然后应用层协议线程阻塞,等待下一个连接或者数据请求,下一个如果是连接请求,则转到步骤三,如果是数据请求,则转到步骤四。
步骤四,应用层协议线程收到来自TCP接收数据线程的数据请求,然后根据套接字(socket)找到相应的会话,然后接收数据,然后把数据发送给消息处理线程,然后应用层协议线程阻塞,等待下一个数据或者连接请求,下一个如果是连接请求,则转到步骤一,如果是数据请求,则转到步骤二。
步骤五,消息处理线程收到来自应用层协议的数据请求,对数据进行处理,在处理的过程中,TCP和应用层协议线程可以不断的接收连接和数据请求,并把消息放到消息处理线程的消息队列中;当执行完操作后,消息处理线程检查消息队列,如果有消息,则继续处理,没有则阻塞。
下面请参阅图2至图5,将以HTTP作为应用层协议为例来说明本发明方法。首先定义3个模块,TCP模块,HTTP模块,消息处理模块,其中HTTP模块和消息处理模块各一个线程,TCP模块包含三个线程,TCP主线程,TCP链路管理线程,TCP接收数据线程。
其软件部分的处理步骤如下首先为TCP模块定义一个数据结构链路控制块LinkBlock ,1000意味着可以同时允许一千个用户并发的访问系统,该数字可以根据实际需要调整。该数据结构主要包含以下字段Socket(该链路所使用的Socket),dwAppIdx(HTTP的索引),bLinkStatus(链路状态,表示该链路是空闲或者LISTENING等待连接或者ESTABLISHED等待接收数据)。并相应地为HTTP定义一个httpLink 的会话信息数据结构。
接着,如图2所示,为本发明的TCP主线程流程图,其包括步骤101,启动TCP主线程。
步骤102,在线程入口进行while(1)循环。
步骤103,在线程入口处首先检查消息队列,如果没有消息,则调用sem_wait阻塞本线程;如果有消息,则直接转到下一步骤104。
步骤104,收到来自HTTP线程的服务器注册消息,该线程被唤醒,如果不是服务器注册消息,则继续阻塞。
步骤105,取出收到的服务器注册消息,并根据服务器注册消息中携带的IP地址等信息,申请一个空闲的LinkBlock,调用socket函数listen建立侦听,LinkBlock设置为LISTENING状态,然后转到步骤102。
如图3所示,为本发明的TCP链路管理线程流程图,其步骤如下步骤201,启动TCP链路管理线程。
步骤202,在线程入口进行while(1)循环。
步骤203,检查LinkBlock[i++].status是否等于LISTENING状态,如果是则转到步骤204,如果不是则重复步骤203。
步骤204,调用FD_SET函数,对这个socket设定异步方式,并转到下一步骤205。
步骤205,是否所有的LinkBlock都设定完成,如果是,转到下一步骤206,如果不是,则转到203继续设定。
步骤206,调用select()进入阻塞状态。
步骤207,收到客户端的连接消息。
步骤208,对每一个LinkBlock[i],用FD_ISSET找到是哪一个socket收到了连接消息。
步骤209,调用accept()接收该连接,并向HTTP线程发送连接消息。
步骤210,调用sem_post()唤醒HTTP线程,重新转到步骤202。
如图4所示,为本发明的TCP数据接收线程流程图,其步骤如下步骤301,启动TCP数据接收线程。
步骤302,在线程入口进行while(1)循环。
步骤303,检查LinkBlock[i++].status是否等于ESTABLISHED状态,如果是则转到步骤304,如果不是则重复步骤303。
步骤304,调用FD_SET函数,对这个socket设定异步方式,并转到下一步骤305。
步骤305,是否所有的LinkBlock都设定完成,如果是,转到下一步骤306,如果不是,则转到步骤303继续设定。
步骤306,调用select()进入阻塞状态。
步骤307,收到客户端的数据。
步骤308,对每一个LinkBlock[i],用FD_ISSET找到是哪一个socket收到了数据。
步骤309,调用recv()接收该连接,并向HTTP线程发送数据。
步骤310,调用sem_post()唤醒HTTP线程,重新转到步骤302。
如图5所示,为本发明的应用层协议线程流程图,其包括如下步骤步骤401,启动HTTP线程。
步骤402,在线程入口进行while(1)循环。
步骤403,检查线程消息队列,如果没有消息则调用sem_wait()阻塞本线程。
步骤404,收到一个消息,线程被唤醒;如果是连接请求,转到下一步骤405;如果是数据请求,则转到步骤407。
步骤405,收到来自TCP链路管理线程的连接请求消息。
步骤406,取出收到的连接请求消息,申请空闲的httpLink,建立会话,转到步骤402,继续等待下一个消息。
步骤407,收到来自TCP数据接收线程的数据请求消息。
步骤408,取出收到的数据请求消息,根据该数据请求消息所携带的信息找到相应的httpLink。
步骤409,判断一次HTTP数据是否接收完成,如果完成,执行下一步骤410;如果没有完成,转到步骤411。
步骤410,向消息处理线程发送消息,并调用sem_post()唤醒消息处理线程,转到步骤402。
步骤411,继续等待后续的数据,转到步骤402。
如图6所示,为本发明的消息处理线程的流程图,其包含如下步骤步骤501,启动消息处理线程。
步骤502,在线程入口进行while(1)循环。
步骤503,检查线程消息队列,如果没有消息则调用sem_wait()阻塞本线程。
步骤504,收到来自HTTP的消息,线程被唤醒。
步骤505,对该消息进行处理,处理完后转到步骤502。
本方法同样适用于其它的应用层协议,如SMTP,IMAP4以及其它基于TCP/IP的各种应用层协议等。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种多用户并发接入装置,应用于TCP/IP服务器,其特征在于,包括TCP模块、应用层协议模块和消息处理模块;所述TCP模块包含有TCP主线程单元,用于建立侦听;TCP链路管理线程单元,用于等待、接收来自客户端的连接请求,并发送所述连接请求至应用层协议模块;TCP接收数据线程单元,用于接收来自客户端的数据,并发送至应用层协议模块;所述应用层协议模块包含应用层协议线程单元,用于等待、接收来自TCP模块的连接请求和/或数据请求,并为所述连接请求和/或数据请求建立相应的会话,以及用于接收所述TCP模块发送的数据,并发送该数据至所述消息处理模块进行处理;所述消息处理模块包含有消息处理线程单元,用于对来自所述应用层协议模块的数据进行数据处理。
2.根据权利要求1所述的多用户并发接入装置,其特征在于,所述应用层协议模块基于HTTP协议、SMTP协议、IMAP4协议以及其它基于TCP/IP的各种应用层协议。
3.一种利用如权利要求1所述装置的多用户并发接入方法,其特征在于,包含如下步骤步骤一,应用层协议线程通过TCP主线程建立一个侦听,等待客户端的连接请求消息;步骤二,TCP链路管理线程等待客户端的连接请求消息,并在收到客户端的连接请求消息后,把该连接请求消息发给应用层协议线程;TCP数据接收线程也等待客户端的数据,并在收到数据后把数据发送给应用层协议线程;步骤三,应用层协议线程收到来自TCP链路管理线程的连接请求消息,并为该连接建立一个会话,在该会话中分配套接字和内存,等待接收数据,然后阻塞该应用层协议线程,等待下一个连接或者数据请求,下一个请求如果是连接请求,则重复步骤三,如果是数据请求,则转到步骤四;步骤四,应用层协议线程收到来自TCP数据接收线程的数据请求消息,然后根据收到的该数据请求消息所携带的信息找到相应的会话,然后接收数据,并把数据发送给消息处理线程,然后阻塞该应用层协议线程,等待下一个数据或者连接请求,下一个请求如果是连接请求,则转到步骤一,如果是数据请求,则转到步骤二;步骤五,消息处理线程收到来自应用层协议的数据请求,对数据进行处理,并且在进行数据处理的过程中,TCP主线程、TCP链路管理线程、TCP接收数据线程和应用层协议线程可以不断地接收连接和数据请求,并把该请求消息放到消息处理线程的消息队列中;当执行完操作后,消息处理线程检查消息队列,如果有消息,则继续处理,没有则阻塞该消息处理线程。
4.根据权利要求3所述的多用户并发接入方法,其特征在于,在步骤一之前还包括一步骤为TCP模块定义一个数据结构链路控制块,设置允许并发接入的用户数目,该数据结构链路控制块包括有表示该链路所使用的套接字、应用层协议的索引以及链路状态的字段,并相应地为应用层协议定义一个会话信息数据结构。
5.根据权利要求4所述的多用户并发接入方法,其特征在于,该链路的状态包括空闲状态、等待连接状态和等待接收数据状态。
6.根据权利要求5所述的多用户并发接入方法,其特征在于,在步骤一中,该TCP主线程收到来自应用协议层线程的服务器注册消息后,唤醒该TCP主线程,并取出收到的消息,根据消息中携带的信息申请一个空闲的数据结构链路控制块,并建立侦听,将该数据结构链路控制块设置成等待连接状态,等待客户端的连接请求。
7.根据权利要求5所述的多用户并发接入方法,其特征在于,在步骤二中,当TCP数据接收线程检查到该链路状态为等待接收数据状态时,该TCP数据接收线程开始通过异步方式接收来自客户端的数据。
8.根据权利要求3所述的多用户并发接入方法,其特征在于,所述TCP主线程、TCP链路管理线程、TCP接收数据线程、应用层协议线程和消息处理线程为一条件循环过程。
9.根据权利要求3所述的多用户并发接入方法,其特征在于,所述应用层协议为HTTP协议、SMTP协议、IMAP4协议以及其它基于TCP/IP的各种应用层协议。
全文摘要
本发明涉及一种多用户并发接入装置及其方法,应用于TCP/IP服务器,该装置包括TCP模块,用于建立侦听,等待和接收来自客户端的连接请求,并发送所述连接请求至应用层协议模块,以及用于接收来自客户端的数据,并发送至应用层协议模块;应用层协议模块,用于等待和接收来自TCP模块的连接请求和/或数据请求,并为所述连接请求和/或数据请求建立相应的会话,以及用于接收TCP模块发送的数据,并发送该数据至消息处理模块进行处理;消息处理模块,用于对来自应用层协议模块的数据进行数据处理。本发明通过少数几个线程即可实现多个客户端同时访问服务器,避免了线程切换消耗的CPU和内存资源,提高了处理速度。
文档编号H04L12/28GK1561043SQ20041004647
公开日2005年1月5日 申请日期2004年6月9日 优先权日2004年2月20日
发明者张亦刚, 井文涛, 田会芹, 钟建 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1