但是现在的主流开发模式中,都是使用前后端分离进行开发。比如说Nginx服务器处理静态资源,Tomcat处理动态请求,Nginx和和Tomcat中间通过ajax请求进行通信,而ajax也是通过http协议进行通信的。所以AJP协议在平时开发中用的较少。
在BIO模式下,对于每个客户端的请求连接都将消耗线程池里面的一条连接,直到整个请求响应完毕。此时,如果有很多请求几乎同时到达Connector,当线程池中的空闲线程用完后,则会创建新的线程,直到达到线程池最大线程数。但如果此时还有更多请求到来,虽然线程池已经处理不过来,但操作系统还是会将客户端接收起来放到一个队列里,这个队列的大小通过SocketServer设置backlog而来。如果还是有再多的请求过来,队列已经超过了SocketServer的backlog大小,那么连接将直接被拒绝掉,客户端将收到“connection refused”报错。
在NIO模式下,则是所有客户端的请求连接先由一个接收线程接收,然后由若干(一般为CPU个数)线程轮询读写事件,最后将具体的读写操作交由线程池处理。可以看到,以这种方式,客户端连接不会在整个请求响应过程占用连接池内的连接,它可以同时处理比BIO模式多得多的客户端连接数,此种模式能承受更大的并发,机器资源使用效率高很多。
APR/native模式也是NIO模式,只不过它是直接用本地代码实现NIO模式(而不是基于JDK的NIO)。
AIO模式,使用JDK的AIO模式。