现在的位置: 首页 > 综合 > 正文

18.2.4 SHTTPD的多客户端支持的分析设计

2013年10月01日 ⁄ 综合 ⁄ 共 896字 ⁄ 字号 评论关闭

18.2.4  SHTTPD的多客户端支持的分析设计

服务器SHTTPD的多客户端支持模块为此程序的主处理模块。在此模块中进行客户端连接的处理、请求数据的接收、响应数据的发送和服务线程的调度。模块的核心部分采用线程池的服务器模型,如图18.9所示。

模块初始化的时候,建立线程池,其中的线程负责接收客户端的请求、解析数据并响应数据。当客户端请求到来的时候,主线程查看当前线程池中是否有空闲的工作线程,当没有工作线程的时候会建立新的工作线程,然后分配任务给空闲的线程。

工作线程轮询接收客户端的请求数据,进行请求数据分析,并响应请求,处理完毕后,关闭客户端的连接,等待主线程分发下一个请求。

多客户端模块的线程处理框架如图18.10所示,主要分为两个部分:线程调度部分和线程退出部分。线程调度部分负责线程初始化、线程的增减、线程的销毁及线程互斥区的保护。线程退出部分则发送信号给工作线程,使得工作线程能够及时地释放资源。这主要应用于接收到用户的信号SIGINT时调用。

 

 

18.9  多客户端模块的数据处理模型

 

 

 

 

18.10  多客户端的线程框架

工作者线程分为多个状态:线程初始化状态、线程空闲状态、线程运行状态、线程退出中状态和线程退出完毕状态,如图18.11所示。

 

 

 

 

18.11  工作线程的状态图

q      线程建立的时候状态为线程初始化状态,此时工作线程不可以接受主线程的任务,刚刚进入线程函数。

q      线程建立完毕的时候进入线程空闲状态,此时可以接受主线程分配的任务,处理客户端的请求,并进行响应。

q      线程运行状态为线程正在处理客户端请求的时机,可以由空闲状态转入,转入的条件为主线程分配给此线程一个任务。在处理完客户端请求时,线程可以转入空闲状态,等待下一次客户端请求任务的分配。

q      线程退出中的状态主要由接收到SIGINT信号后调用线程退出函数时引起,此时各个线程在非阻塞的时候会及时响应此状态,释放资源、关闭连接。进入线程退出完毕的状态。

q      线程退出完毕状态是由于各个线程都释放完申请的动态资源,正常结束后进入的状态。此时,整个应用程序可以正常退出了。

抱歉!评论已关闭.