tomcat 源码分析之--请求接受以及缓冲池
tomcat? 从接受请求到处理的流程大概如下:
?
首先配置文件中的connector都对应一个Connector类,这个类根据配置信息确定对应的
ProtocalHandler(处理connector配置对应的协议).
?
?
?? 抛开其他代码,注意上面方法里面的这一句:protocolHandler.start();
?? 比如http1.1协议对应的ProtocalHandler是:Http11Protocol。?? 而这个ProtocalHanler依靠一个对应的EndPoint对象来处理请求,http11protocal的start方法代码
? 如下:
?
??
?
??? 注意其中的代码:??????? endpoint.start();
?? Endpoint是对应的protocalhandler的工具类,每个endpoinst都监听一个对应的ServerSocket并且处理请求,start方法代码如下:
??
?
?? 很容易看出,其实tomcat的请求监听也不是单线程的,有多个线程在进行监听。那么每个监听线程在监听到socket请求之后做什么工作呢?就是处理socket.这是通过调用Endpoint的processSocket方法实现的:
?
protected void recycleWorkerThread(Worker workerThread) { synchronized (workers) { workers.push(workerThread); curThreadsBusy--; workers.notify(); } }??
至此,一个缓冲池轻松实现了。
??? ??