HttpConnector请求处理分工如下:
1、ServerSocket等待接受Http请求连接;
2、请求到达,从HttpProcessor处理池获取处理对象;
3、委托给HttpProcessor具体处理请求;
4、当前HttpConnector继续等得下一个Http请求;
具体HttpConnector和HttpProcessor如何实现异步工作机制?
HttpConnector和HttpProcessor两者都实现Runnable接口,并且两者本身运行在自身线程中。
这里我们称HttpConnector实例中run方法所在线程为连接器线程;而HttpProcessor实例中run方法所在线程为处理器线程。
首先看下HttpConnector对应连接器线程的run方法,主要工作:
1、阻塞等待Http请求;
2、为每个请求分配一个HttpProcessor对象;
3、调用HttpProcessor的process()方法处理;
public void run() {
// 循环,直到shutdown
while (!stopped) {
// 监听socket
Socket socket = serverSocket.accept();
// 为socket分配处理器
HttpProcessor processor = createProcessor();
// 如果当前没有空闲处理器
if(processor == null) {
// 忽略请求,不做处理
}
// 执行处理
processor.assign(socket);
}
}
HttpConnector中run方法所在连接器线程进入HttpProcessor对象的assign()方法,如下: